Stay Hungry Stay Foolish

분류 전체보기 423

[원티드] MySQL 기본기 다지기 | 프리온보딩 BE 챌린지 10월 (1주차)

MySQL 기본기 다지기 | 프리온보딩 BE 챌린지 10월 | 원티드 무료로 양질의 교육을 들어보세요! 챌린저만을 위한 다양한 혜택을 제공해드리고 있습니다. www.wanted.co.kr ☐ 데이터베이스의 원칙 1. 무결성(Integrity) : 데이터에 오류가 없어야 하며, 사용자가 저장하고자 하는 내용들이 그대로 저장되어야 한다. 2. 안전성(Reliability) : 말 한마디로 안전해야 하며, 고장도 잘 나지 않아야 한다. 3. 확장성(Scalability) : 서버를 운영하다보면 규모가 커질 수 있는데, 이때 많은 용량과 성능이 필요하게 된다. 따라서 수평적으로 부하를 분산하는 스케일 아웃(Scale-Out)방식으로 확장할 것인지, 아니면 서버의 용량 자체를 올리는 스케일 업(Scale-Up)방..

[알고리즘] DP (Dynamic Programming, 동적 계획법)

➤ DP 알고리즘이란? 하나의 큰 문제를 여러 개의 작은 문제로 나누어서 그 결과를 저장하여 다시 큰 문제를 해결하는 방식을 사용하여, 여러 번 반복되는 동일한 문제를 계산할 때의 비효율성을 방지하는 해결 방법이다. 큰 문제를 작은 문제로 쪼개서 그 답을 저장해두고 재활용한다. 위의 그림을 보면 같은 함수들이 여러번 호출되는 것을 볼 수 있다. 컴퓨터 상에서 연산을 할 때 같은 함수를 여러 번 호출하고 사용하다 보면 메모리 낭비가 되고, 연산 속도도 늘어나기 때문에 비효율적이다. 이러한 문제를 해결하기 위해서 사용하는 것이 동적 계획법이다. DP 알고리즘으로 해결할 수 있는 대표적인 예시로 피보나치 수열이 있다. 피보나치 수열은 이전두 항의 합을 현재의 항으로 설정하는 특징이 있는 수열이다. 피보나치 수..

알고리즘 2023.09.25

BOJ 2748번 : 피보나치 수 2 (Python/Bronze 1)

2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 설명 n번째 피보나치 수를 출력하는 문제이다. 풀이 피보나치 수는 DP 알고리즘을 사용하는 것이 일반적이고 더 효율적이다. Solution 방식 1. Bottom-up(하향식) import sys input = sys.stdin.readline n = int(input()) dp = [0]*(n + 1) dp[1] = 1 #bottom-up def fibo(n): for i in range(2, n + 1): dp[i] = d..

BOJ 2312번 : 수 복원하기 (Python/Silver 3)

2312번: 수 복원하기 첫째 줄에 테스트 케이스의 수가 주어진다. 각 테스트 케이스마다 양의 정수 N (2 ≤ N ≤ 100,000)이 주어진다. www.acmicpc.net 설명 양의 정수 N을 소인수분해 한 결과를 출력하는데, 인수와 인수의 수를 출력하는 문제이다. Solution #20:00 - 20:08 #양의 정수 N을 소인수분해 한 결과를 출력해라 #메모리와 시간이 오래 걸리는 코드 import sys input = sys.stdin.readline def res(n): for i in range(2, n + 1): cnt = 0 #인수가 곱해진 횟수 초기화 while n % i == 0: #정수 n이 i로 나누어지면 cnt += 1 #인수가 곱해진 횟수 카운트 n /= i #몫을 n에 저장..

BOJ 2960번 : 에라토스테네스의 체 (Python/Silver 4)

2960번: 에라토스테네스의 체 2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다. www.acmicpc.net 설명 단순히 소수를 구하는 것이 아니다. 에라토스테네스의 체의 원리를 반영하면서 문제를 풀어줘야 한다. 다시 말해 2부터 N까지의 모든 정수 중 제일 작은 수부터 시작하여 그 소수의 배수들을 모두 지워나간다. 지워나갔으면, 안 지워진 가장 작은 수부터 또다시 반복한다. 여기까지가 에라토스테네스 체의 원리이다. 이 문제에서는 소수도 지워야 하고 배수도 지워야 하는데 그 과정에서 K번째로 지워지는 수를 찾는 것이다. 풀이 ➪ 에라토스테네의 체 알고리즘이 궁금하다면? 에라토스테네스의 체 에라토스테네스의 체란? 소수를 찾는 방법으로, 고대 그리스 수학자 에..

[알고리즘] 에라토스테네스의 체

에라토스테네스의 체란? 소수를 찾는 방법으로, 고대 그리스 수학자 에라토스테네스가 발견했다. 이 알고리즘을 사용하지 않고 단순히 소수를 구하려고 할 때 시간이 오래 걸리므로 소수를 구하고자 할 때 에라토스테네스의 체 알고리즘을 사용하는 것이 훨씬 효율적이다. Alogrithm 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색으로 표시) 자기 자신을 제외한 2의 배수를 모두 지운다. (선홍색으로 표시) 남아있는 수 가운데 2의 다음인 3은 소수이므로 오른쪽에 3을 쓴다. (초록색으로 표시) 자기 자신을 제외한 3의 배수를 모두 지운다. (연초록으로 표시) 위의 과정을 반복하면 구하고자 하는 구간의 ..

알고리즘 2023.09.23

BOJ 2583번 : 영역 구하기 (Python/Silver 1)

2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net 설명 M×N 모눈종이에서 K개의 직사각형이 있고, 그 직사각형 부분을 제외한 나머지 영역의 개수와 넓이를 구하면 된다. 풀이 ✓ 그래프 탐색 - DFS로 풀이 Solution #18:35 - 19:17 -> 풀이봄 19:57 제출 import sys input = sys.stdin.readline sys.setrecursionlimit(10**9) #->런타임 에러 방지/재귀 깊이 변경 M, N, K = map(int, input().spli..

BOJ 2468번 : 안전 영역 (Python/Silver 1)

2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 설명 🌟 문제 핵심 - 안전 영역이 최대인 것을 구하라. 나도 처음엔 무슨 소리인가 했는데, 영역이라는 것을 생각해야 한다. 강수량은 주어지지 않으므로 모든 강수량을 따져야 한다. 다음과 같이 N = 5인 지역이 있다고 하자. 영역은 오른쪽, 왼쪽, 위, 아래가 이어져 있으면 한 영역으로 본다. 만약, 강수량이 0일 때 비가 오지 않음을 뜻하므로 잠기는 곳은 없다. 왼, 오, 위, 아래가 다 이어져있으면 하나의 영역으로 본다고 했으므로 안전 영역은 1이다. 만약, 강수..

BOJ 1715번 : 카드 정렬하기 (Python/Gold 4)

1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 설명 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 예를 들어 10장, 20장, 40장의 묶음이 있다면 10장과 20장을 합친 뒤, 합친 30장 묶음과 40장을 합친다면 (10 + 20) + (30 + 40) = 100번의 비교가 필요하다. 그러나 10장과 40장을 합친 뒤, 합친 50장 묶음과 20장을 합친다면 (10 + 40) + ..

BOJ 7568번 : 덩치 (Python/Silver 5)

7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 설명 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼 때 C와 D는 누구도 상대방보다 더 크다고 말할 수 없다. 예시) 이름 (몸무게, 키) 덩치..

BOJ 1339번 : 단어 수학 (Python/Gold 4)

1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 설명 예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다. N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오. 풀이 예를 들어 단어가 GCF와 ACDEB일 때, 100*G + 10*C + F*1, 10000*A + 1000*C + 100*D + 10*E + B*1. Solut..

BOJ 2667번 : 단지번호붙이기 (Python/Silver 1)

2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 설명 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 1로 연결된 곳은 하나의 단지다. (대각선에 집이 있는 경우는 연결된 것이 아니다.) 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 총 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 풀이 ✓ BFS 알고리즘 이용 https://dev-cloud.tistory.com/161 -> 유사한 문제이다. BFS와..

[알고리즘] BFS/DFS 알고리즘 (그래프 탐색)

그래프 탐색(Graph Search) 그래프 탐색이란 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한번씩 방문하는 것을 말한다. 단순히 그래프의 노드를 탐색하는 것으로 문제를 해결한다. 그래프 탐색에는 BFS/DFS가 있다. ✔ BFS(Breadth First Search) 정의 너비 우선 탐색이라는 뜻이고, 쉽게 말해 가까운 노드부터 탐색하는 알고리즘이다. 아래의 그림을 보면서 쉽게 이해해보자. 위의 그림과 같이 6개의 노드와 5개의 간선(노드의 개수-1)이 있다. 노드 1번부터 시작해서 2번을 탐색하고 다음으로 4번 노드를 탐색하는 게 아닌 3번 먼저 탐색하는 것이다. 3번 옆에 아무것도 없으므로 다시 2번 노드로 돌아와서 2번 노드의 하위 노드 중 하나인 4번을 탐색한다. 4번을 끝냈으면 다..

알고리즘 2023.05.15

BOJ 10026번 : 적록 색약 (Python/Gold 5)

10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 설명 위의 그림과 같이 크기가 5x5인 그리드가 주어졌다고 하자. R은 빨간색, B는 파란색, G는 초록색을 나타낸 것이다. 같은 색끼리 인접해 있으면 그건 하나의 구역이다. 이 문제는 적록색약이 아닌 경우와 적록색약인 경우로 나눠서 구하는 문제이다. 적록색약인 경우는 빨간색과 초록색을 구분하지 못해서 같은 색으로 보일 것이다. 따라서 두 경우를 나눠서 구역을 구해보자. 아래는 구역을 색깔별로 구분해서 구역을 나타낸 것이다. 그리드 안에 검은색 선은 구역을..

BOJ 2178번 : 미로 탐색 (Python/Silver 1)

2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 설명 위 사진은 미로를 나타낸 것이다. 1은 이동할 수 있는 칸이고, 0은 이동할 수 없는 칸이다. Start칸에서 End칸까지 가야하는데, 지나갈 수 있는 최소의 칸을 구하면 된다. 주황색 형광으로 칠한 곳이 지나갈 수 있는 최소 칸 개수를 센 것이다. 칸 개수를 셀 때 시작칸과 마지막칸도 포함된다. 그럼 이제 문제를 풀어보자! 풀이 BFS 이용 1. 파이썬에서 BFS를 구현하기 위해서는 큐가 필요하다. 따라서 큐를 만든다. 파이썬 덱 모듈 내에 스택과 큐가 내장돼 있어서 사용하기 편한 덱 ..