목록그리디 알고리즘 (11)
홍우진의 개발 일기장
문제 링크 https://www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 풀이 코드 i = 0 while True: i+=1 l, p, v = map(int, input().split()) if l == 0 and p == 0 and v == 0: break a = v//p b = v%p if l
문제 링크 https://www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 풀이 코드 i = 0 while True: i+=1 l, p, v = map(int, input().split()) if l == 0 and p == 0 and v == 0: break a = v//p b = v%p if l
문제 링크 https://www.acmicpc.net/problem/11508 11508번: 2+1 세일 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 www.acmicpc.net 풀이 코드 n = int(input()) c = [] for i in range(n): c.append(int(input())) c.sort(reverse = True) result = 0 for i in range(2,len(c),3): result += c[i] print(sum(c)-result) 코드 해석 받은 수를 3개 단위로 끊은 뒤 각각 세번째로 오는 수를 뺀 나..
문제 링크 https://www.acmicpc.net/problem/1417 1417번: 국회의원 선거 첫째 줄에 후보의 수 N이 주어진다. 둘째 줄부터 차례대로 기호 1번을 찍으려고 하는 사람의 수, 기호 2번을 찍으려고 하는 수, 이렇게 총 N개의 줄에 걸쳐 입력이 들어온다. N은 50보다 작거나 같 www.acmicpc.net 풀이 코드 n = int(input()) one = int(input()) vote = [] count = 0 for _ in range(n - 1): vote.append(int(input())) vote.sort(reverse=True) if n == 1: print(0) else: while vote[0] >= one: one += 1 vote[0] -= 1 count ..
문제 링크 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/1343 1343번: 폴리오미노 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. www.acmicpc.net 풀이 코드 board = input() board = board.replace("XXXX", "AAAA") board = board.replace("XX", "BB") if 'X' in board: print(-1) else: print(board) 코드 해석 파이썬의 replace 함수를 사용하여 쉽게 풀 수 있다.
문제 링크 https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 풀이 코드 n = int(input()) cnt = 0 i = 0 while True: if n % 5 == 0: cnt += n//5 break else: n -= 2 cnt += 1 if n < 0: break if n
문제 링크 https://www.acmicpc.net/problem/1783 1783번: 병든 나이트 첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 코드 n, m = map(int, input().split()) if n == 1: print(1) elif n == 2: print(min(4, (m-1)//2+1)) elif m