목록그리디 (5)
코테 탈출일지
https://www.acmicpc.net/problem/1213
https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 접근 방식 - Bottom up (A to B), Top down (B to A) 방식 고민 - 두 가지 종류의 연산의 반복 구현과 현 상황의 최적해 고민 코드 풀이 a, b = map(int, input().split()) cnt = 1 # 최소값에 1을 더한 값 출력하라고 했음 while b != a: if b % 10 == 1: # 맨 뒷자리 1이라면 일단 1 떼주는 연산 b = int(b/10) cnt += 1 elif b % 2 == 0 and b!=0: # elif로 처리해야 시간초과 방지, b = 0 무한루프..
https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 접근 방식 - 사용하는 로프의 갯수를 어떻게 효율적으로 탐색할지 (1부터 n개까지) - 숫자 정렬 방식 고민 (max 함수, sort 함수) 코드 풀이 n = int(input()) ropes = [] # 전체 로프 종류 리스트로 저장 for _ in range(n): ropes.append(int(input())) ropes = sorted(ropes, reverse = True) # ..
https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 접근 방식 - 점화식 고민하기 및 경우의 수 나누기 (2로만, 5로만, 조합으로만, 조합불가) - 수학적 구현 방법 고민 코드 풀이 n = int(input()) cnt = 0 while True: if n%5 == 0: cnt += n//5 # 5로 나누어 떨어질 때까지 break else: n -= 2 # 2를 빼주고 cnt += 1 # cnt 수 += 1 if n
https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 접근 방식 - 효율적인 탐색법 고민 코드 풀이 n = int(input()) max_5 = n // 5 # 5kg 봉지의 최대 갯수 flag = 0 # 나누어떨어지는지 확인하기 위한 장치 for num_5 in range(max_5, -1, -1): # 역순, max_5 = 3라면 3, 2, 1, 0 순서로 호출 if (n - (num_5 * 5)) % 3 == 0: # 나머지 무게를 3kg 봉지로 만들 수..