분류 전체보기 216

[102일차] 1, 2, 3 더하기 - 백준 - 9095(python - 다이나믹 프로그래밍)

문제 설명 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 예제 입력, 예제 출력 3 4 7 10 7 44 274 코드 및 설명 n = int(input()) dp = [0, 1, 2, 4] + [0] * (7) for i in..

[102일차] 2×n 타일링 - 백준 - 11726(python - 다이나믹 프로그래밍)

문제 설명 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력, 예제 출력 2 2 9 55 코드 및 설명 n = int(input()) dp = [0, 1, 2] + ([0] * (n-2)) for i in range(3, n+1): dp[i] = dp[i-1] + dp[i-2] print(dp[n] % 10007) 이 문제는 DP 문제로 2 x n 크기의 직사각형을 1x2, 2x1 타일로 채우는 방법의 수이다. n = 1..

[102일차] 1로 만들기 - 백준 - 1463(python - 다이나믹 프로그래밍)

문제 설명 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. 1. X가 3으로 나누어 떨어지면, 3으로 나눈다. 2. X가 2로 나누어 떨어지면, 2로 나눈다. 3. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 예제 입력, 예제 출력 2 1 10 3 코드 및 설명 x = int(input()) dp = [0] * (x+1) for i in range(2,x+1): dp[i] = dp[i-1] +1 if i % 2 == 0: dp[i] = min(dp[i], ..

[101일차] 팩토리얼 0의 개수 - 백준 - 1676(python - 수학)

문제 설명 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) 출력 첫째 줄에 구한 0의 개수를 출력한다. 예제 입력, 예제 출력 10 2 3 0 코드 및 설명 n = int(input()) fact = 1 cnt = 0 for i in range(1, n+1): fact *= i fact = str(fact) for i in range(len(fact)-1, -1, -1): if fact[i] == "0": cnt += 1 else: break print(cnt) 이 문제는 N의 값을 N!을 구하고, 뒤에서부터 0의 개수가 0이 아닌 수를 만날때까지 세면 되는 문제이다. 수학으로 푸는 방식도 있었다...

[100일차] 골드바흐의 추측 - 백준 - 6588(python - 정수론, 소수 판정, 에라토스테네스의 체)

문제 설명 1742년, 독일의 아마추어 수학가 크리스티안 골드바흐는 레온하르트 오일러에게 다음과 같은 추측을 제안하는 편지를 보냈다. 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다. 예를 들어 8은 3 + 5로 나타낼 수 있고, 3과 5는 모두 홀수인 소수이다. 또, 20 = 3 + 17 = 7 + 13, 42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 이다. 이 추측은 아직도 해결되지 않은 문제이다. 백만 이하의 모든 짝수에 대해서, 이 추측을 검증하는 프로그램을 작성하시오. 입력 입력은 하나 또는 그 이상의 테스트 케이스로 이루어져 있다. 테스트 케이스의 개수는 100,000개를 넘지 않는다. 각 테스트 케이스는 짝수 정수 n 하나로 이루어져 있다. (6 ≤..

[99일차] 소수 구하기 - 백준 - 1929(python - 정수론, 소수 판정, 에라토스테네스의 체)

문제 설명 M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. 출력 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다. 예제 입력, 예제 출력 3 16 3 5 7 11 13 코드 및 설명 import math m, n = map(int, input().split(" ")) answer = [] def gcd(i): if i == 1: return False for j in range(2, int(math.sqrt(i))+1): if i % j == 0: return False return True for i in range(m, ..

[99일차] 소수 찾기 - 백준 - 1978(python - 정수론, 소수 판정)

문제 설명 주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오. 입력 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. 출력 주어진 수들 중 소수의 개수를 출력한다. 예제 입출력 4 1 3 5 7 3 코드 및 설명 n = int(input()) n_arr = list(map(int, input().split(" "))) answer = 0 for val in n_arr: tmp = [] cnt = 1 while True: if val < cnt: break else: if val % cnt == 0: tmp.append(cnt) cnt += 1 if len(tmp) == 2: answer += 1 pri..

[98일차] 최소공배수 - 백준 - 1934(python - 정수론, 유클리드 호제법)

문제 설명 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있으며, 최소 공배수는 30이다. 두 자연수 A와 B가 주어졌을 때, A와 B의 최소공배수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 둘째 줄부터 T개의 줄에 걸쳐서 A와 B가 주어진다. (1 ≤ A, B ≤ 45,000) 출력 첫째 줄부터 T개의 줄에 A와 B의 최소공배수를 입력받은 순서대로 한 줄에 하나씩 출력한다. 예제 입출력 3 1 45000 6 10 13 17 45000 30 221 코드 및 설명 t = in..

[98일차] 최대공약수와 최소공배수 - 백준 - 2609(python - 정수론, 유클리드 호제)

문제 설명 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다. 출력 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. 예제 입출력 24 18 6 72 코드 및 설명 n, m = map(int, input().split(" ")) count = 2 share = [] remain = 0 answer = 1 while True: if n < count or m < count: for val in share: answer *= val remain = answer * n * m break if n..

[98일차] 접미사 배열 - 백준 - 11656(python - 문자열, 정렬)

문제 설명 접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다. baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다. 문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. 출력 첫째 줄부터 S의 접미사를 사전순으로 한 줄에 하나씩 출력한다. 예제 입출력 baekjoon aekjoon baekjoon ekjoon jo..