목록파이썬 (140)
홍우진의 개발 일기장
문제 링크 https://www.acmicpc.net/problem/5568 풀이 코드 from itertools import permutations n, k = int(input()), int(input()) cards = [input().rstrip() for _ in range(n)] res = set() for per in permutations(cards, k): res.add(''.join(per)) print(len(res)) 코드 해석 순열을 이용하여 풀면 되는데 permutations() 를 사용하면 순열을 쉽게 구할 수 있다.
문제 링크 https://www.acmicpc.net/problem/16435 16435번: 스네이크버드 첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다. 두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다. www.acmicpc.net 풀이 코드 n, l = map(int,input().split()) h = list(map(int,input().split())) h.sort() for i in h: if l >= i: l += 1 else: break print(l) 코드 해석 과일을 크기순으로 정렬 한 후 스네이크버드의 길이를 한단계씩 늘려가며 비교한다. 만약 더..
문제 링크 https://www.acmicpc.net/problem/5347 5347번: LCM 첫째 줄에 테스트 케이스의 개수 n이 주어진다. 다음 n개 줄에는 a와 b가 주어진다. a와 b사이에는 공백이 하나 이상 있다. 두 수는 백만보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 코드 from math import gcd def lcm(x,y): return x*y // gcd(x,y) n = int(input()) for _ in range(n): a,b = map(int,input().split()) print(lcm(a,b)) 코드 해석 math의 gcd 함수를 사용하고 유클리드 호재법을 적용 하여 최대공약수를 구한다.
문제 링크 https://www.acmicpc.net/problem/10994 10994번: 별 찍기 - 19 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. www.acmicpc.net 풀이 코드 N = int(input()) for i in range(N - 1): print("* " * i + "*" * (1 + 4 * (N - i - 1)) + " *" * i) print("* " * (i + 1) + " " * (1 + 4 * (N - i - 2)) + " *" * (i + 1)) print("* " * (2 * N - 1)) for i in range(N - 1): print("* " * (N - i - 1) + " " * (1 + 4 * i) + " *" * (N - i - 1)) pri..
문제 링크 https://www.acmicpc.net/problem/2670 2670번: 연속부분최대곱 첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나 www.acmicpc.net 풀이 코드 n = int(input()) nums = [float(input()) for _ in range(n)] for i in range(1, n): nums[i] = max(nums[i - 1] * nums[i], nums[i]) print("{:.3f}".format(max(nums))) 코드 해석 숫자들을 float 형식으로 nums 리스트에 저장합니다. 그 후 ..
문제 링크 https://www.acmicpc.net/problem/1059 풀이 코드 L = int(input()) S = list(map(int,input().split())) n = int(input()) S.sort() if n in S: print(0) else: min = 0 max = 0 for num in S: if num n and max == 0: max = num max -= 1 min += 1 print((n-min)*(max-n+1) + (max-n)) 코드 해석 (n보다 작은 수의 개수) * (n을 포함한 n보다 큰 수의 개수) + (n보다 큰 수의 개수) 라는 규칙을 적용한다. 먼저 수를 받은 후 리스트에 저장한다. 만약 리스트 안..
문제 링크 https://www.acmicpc.net/problem/10158 풀이 코드 w, h = map(int, input().split()) p, q = map(int, input().split()) t = int(input()) a = (p + t) // w b = (q + t) // h if a % 2 == 0: x = (p + t) % w else: x = w - (p + t) % w if b % 2 == 0: y = (q + t) % h else: y = h - (q + t) % h print(x, y) 코드 해석 가로와 세로를 따로 생각한다. 초기값에서 시간을 더한값을 격자의 길이로 나눈 나머지를 구하면 된다. 만약 나며지가 0이 아니면 그 값에서 격자의 길이를 뺀다.
문제 링크 https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 풀이 코드 n = int(input()) m = int(input()) nums = list(map(int,input().split())) nums.sort() left, right = 0, len(nums) - 1 count = 0 while left < right: sum_num = nums[left] + nums[right] if sum_num < m: l..