Stay Hungry Stay Foolish

BOJ 코딩테스트 184

BOJ 5073번 : 삼각형과 세 변 (Python/구현/Bronze 3)

5073번: 삼각형과 세 변 각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오. www.acmicpc.net 설명 삼각형 세 변의 길이가 주어질 때 - Equilateral : 세 변의 길이가 모두 같은 경우 - Isosceles : 두 변의 길이만 같은 경우 - Scalene : 세 변의 길이가 모두 다른 경우 삼각형 조건을 만족하지 못하는 경우 "Invalid"를 출력(가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않으면) 풀이 1. while 문으로 입력값과 출력을 반복 2. 입력값을 리스트에 저장한 후 오름차순 정렬 조건문 1. 입력값이 모두 0이면 반복문 중단 2. 첫 번째 값이 두 번째와 세 번째 길이를 합한 것보다 크거..

BOJ 2164번 : 카드2 (Python/자료구조(큐)/Silver 4)

2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 설명 N장의 카드가 있는데, 한 장이 남을 때까지 다음과 같은 동작을 반복한다. 1. 제일 위에 있는 카드를 버린다. 2. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 위 과정을 반복하고 나면 한 장의 카드가 남게 된다. 그 수를 구해야 한다. 풀이 Queue 사용 1. 큐 생성 2. 1장이 남을 때 까지 버리고, 옮기는 과정을 반복 반복문에서 popleft()를 이용해 윗 장을 버린다. 첫 번째 카드를 append()를 이용해 맨 ..

BOJ 11728번 : 배열 합치기 (Python/Two-Pointer/Silver 5)

11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거 www.acmicpc.net 설명 정렬되어있는 두 배열 A, B를 합친 후 정렬해서 출력한다. 첫째 줄에는 배열 A, B의 크기 N과 M이 주어진다. (1부터) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 풀이 • 방법 1 - sort() 문자형으로 입력받고 한 리스트에 A, B를 모두 저장한다. 리스트 내에 있는 요소를 모두 정수형으로 변환한다. sort()를 사용해 정렬하고 리스트에서 꺼내 출력한다. • 방법 2 - two ..

BOJ 10814번 : 나이순 정렬 (Python/자료구조/Silver 5)

10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 설명 문제 : 회원들의 나이 순대로 정렬(오름차순), 나이가 같을 경우 가입한 순으로 정렬(내림차순) 풀이 Sort() 사용 1. 나이와 이름을 리스트에 추가한다. 나이는 정수형으로 변환시킨다. 2. 첫 번째 인자를 기준으로 정렬 즉, 나이순으로 정렬한다. 3. 리스트에서 값을 하나씩 빼내서 출력한다. • 리스트.sort(key=lambda x:x[index]) - index를 기준으로 오름차순 정렬 sort 정리 👇 [자료구조] sort, sorted, 정렬, 이중 ..

BOJ 11722번 : 가장 긴 감소하는 부분 수열 (Python/Silver 2)

11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net 설명 부분 수열의 최대 길이를 구해야 하는 문제이다. 부분 수열이란 주어진 수열의 일부 항을 원래 순서대로 나열하여 얻을 수 있는 수열이다. 쉽게 말해서 이전 수보다 작으면 수열이 이루어진다. 흔히 수학에서 보았던 두 항의 차이가 일정한 등차수열을 말하는 것이 아니다. 예를 들어, A : { 10, 30, 10, 20, 20, 10 } 이라는 수열이 있을 때, 부분 수열은 A : { 10,..

BOJ 9461번 : 파도반 수열 (Python/Silver 3)

9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 설명 첫 정삼각형이 1일 때 변의 길이는 1이다. 아래와 같은 그림처럼 나선형으로 삼각형이 이어진다. 만약 1, 1, 1, 2, 2, 3, 4, 5, 7, 9 가 있을 때 10번째 삼각형의 변의 길이는 9이다. N이 주어졌을 때 N번째 삼각형의 변의 길이를 출력하면 된다. 풀이 • Dynamic Programming 문제 피보나치 수열과 비슷하다. 규칙성을 찾아보면 아래 그림에서 1번째와 2번째를 더하면 4번째 값이 나온다. 고로, 4만큼 차이가 난다. 또한, 아래 ..

BOJ 11053번 : 가장 긴 증가하는 부분 수열 (Python/Silver 2)

11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 설명 부분 수열의 최대 길이를 구해야 하는 문제이다. 부분 수열이란 주어진 수열의 일부 항을 원래 순서대로 나열하여 얻을 수 있는 수열이다. 쉽게 말해서 이전 수보다 크면 수열이 이루어진다. 흔히 수학에서 보았던 두 항의 차이가 일정한 등차수열을 말하는 것이 아니다. 예를 들어, A : { 10, 20, 10, 30, 20, 50 } 이라는 수열이 있을 때, 부분 수열은 A : { 10..

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번째로 지워지는 수를 찾는 것이다. 풀이 ➪ 에라토스테네의 체 알고리즘이 궁금하다면? 에라토스테네스의 체 에라토스테네스의 체란? 소수를 찾는 방법으로, 고대 그리스 수학자 에..

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..