Python 32

[106일차] 공 바꾸기 - 백준 - 10813(python - 구현, 시뮬레이션)

문제 설명 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다. 도현이는 앞으로 M번 공을 바꾸려고 한다. 도현이는 공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 교환한다. 공을 어떻게 바꿀지가 주어졌을 때, M번 공을 바꾼 이후에 각 바구니에 어떤 공이 들어있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐서 공을 교환할 방법이 주어진다. 각 방법은 두 정수 i j로 이루어져 있으며, i번 바구니와 j번 바구니에 들어있는 공을 교환한다..

[105일차] 공 넣기 - 백준 - 10810(python - 구현, 시뮬레이션)

문제 설명 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다. 도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다. 공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (1 ≤ N ≤..

[103일차] 대소문자 바꾸기 - 백준 - 2744(python - 문자열)

문제 설명 영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 100이다. 출력 첫째 줄에 입력으로 주어진 단어에서 대문자는 소문자로, 소문자는 대문자로 바꾼 단어를 출력한다. 예제 입력, 예제 출력 WrongAnswer wRONGaNSWER 코드 및 설명 s = input() answer = "" for char in s: if ord(char) >= 97: answer += char.upper() else: answer += char.lower() print(answer) 이 문제는 소문자를 대문자로, 대문자를 소문자로 바꾸는 간단한 문..

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