목록알고리즘 (193)
홍우진의 개발 일기장
문제 링크 https://www.acmicpc.net/problem/1205 1205번: 등수 구하기 첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보 www.acmicpc.net 풀이 코드 n, new, p = map(int, input().split()) if n == 0: print(1) else: score = list(map(int, input().split())) if n == p and score[-1] >= new: print(-1) else: res = n + 1 for i in range(n): if score[i]
문제 링크 https://www.acmicpc.net/problem/1755 1755번: 숫자놀이 79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로 www.acmicpc.net 풀이 코드 m, n = map(int, input().split()) dict = {'1':'one', '2':'two', '3':'three', '4':'four', '5':'five', '6':'six', '7':'seven', '8':'eight', '9':'nine', '0':'zero'} l = [] for i in rang..
문제 링크 https://www.acmicpc.net/problem/10211 10211번: Maximum Subarray 크기 N인 정수형 배열 X가 있을 때, X의 부분 배열(X의 연속한 일부분) 중 각 원소의 합이 가장 큰 부분 배열을 찾는 Maximum subarray problem(최대 부분배열 문제)은 컴퓨터 과학에서 매우 잘 알려져 있 www.acmicpc.net 풀이 코드 t = int(input()) for _ in range(t): n = int(input()) arr = list(map(int, input().split())) dp = [0] * n dp[0] = arr[0] for i in range(1, n): dp[i] = max(dp[i-1]+arr[i], arr[i]) pri..
문제 링크 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/2828 2828번: 사과 담기 게임 상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M end: distance += (p - end) end = p start = end - m + 1 print(distance) 코드 해석 수를 받은 뒤 바구니의 길이를 start와 end로 지정해놓는다. 사과가 떨어지는 위치와 바구니의 위치를 비교하여 distance와 start값과 end값을 조정한다.
문제 링크 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..