본문 바로가기

공부하는 것들/알고리즘

(52)
백준 2839 : 설탕 배달(그리디) www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 설탕 N(kg) 배달, 봉지는 3kg짜리와, 5kg 짜리가 있음 최대한 봉지를 적게 가져가는 것은? 단, 정확하게 Nkg을 배달할 수 없으면, -1을 출력 거스름돈 문제와 비슷해 보이지만, 모든 경우의 수를 다 해봐야한다는 차이가 있음. 풀이: 5kg짜리 봉지를 많이 사용하는 순으로 --> 남는 양이 3의 배수인 지 체크하면서 갯수를 저장 ex. N=18 --> 5kg짜리를 3,2,1,0 순으로 사용하고--> 그때 남는 ..
백준 2828 : 사과 담기 게임(그리디) ** www.acmicpc.net/problem/2828 2828번: 사과 담기 게임 상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M R : dist = (point-R) L,R = L+dist, R+dist elif point < L : dist = (L-point) L,R = L-dist, R-dist else: continue ans+=dist return ans if __name__=='__main__': N,M = map(int,input().split()) num = int(input()) apples = [] for _ in range(num): apples.append(int(input())-1)..
백준 5585 : 거스름돈 (그리디) www.acmicpc.net/problem/5585 5585번: 거스름돈 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사 www.acmicpc.net # 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있다 def solve(charge): a = charge//500 charge -= 500*a b = charge//100 charge -= 100*b c = charge//50 charge -= 50*c d = charge//10 charge -= 10*d e = charge//5 charge -= 5*e return in..
백준 2810 : 컵홀더(그리디)*** www.acmicpc.net/problem/2810 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net 양 끝의 사람은 무조건 바깥쪽 홀더를 사용해야 한다. 컵홀더에 컵을 꽂을 수 있는 최대 사람의 수 존재하는 컵홀더의 개수를 구한 다음에, 사람수와의 min값을 반환하면 된다 코너 테스트 케이스 : 5, SLLSS 1, S if __name__=='__main__': N = int(input()) seats = str(input()) Ls = seats.split('S') ## 커플석들의 정보 Ss = seats.split('LL') ## 싱글석들의 정보 L_holders = [len(n)//2-1 for n ..
백준 1434 : 책 정리(그리디)* www.acmicpc.net/problem/1434 1434번: 책 정리 첫째 줄에 박스의 개수 N, 책의 개수 M이 주어진다. 둘째 줄에는 박스의 용량 A1, A2, ..., AN이 주어지고, 셋째 줄에는 B1, B2, ..., BM이 주어진다. www.acmicpc.net 문제 요약: 빈 박스 N개, 넣어야 하는 책 M개. (둘다 번호 매겨져 있음) 다음 순서로 책을 박스에 넣는다. 1번 박스 앞에 1번 책을 들고 있음. (## 1. 현재 책이 현재 박스에 들어가지 않으면 --> 3번 스텝 or 2번 스텝 으로 이해를 했는데... ##3번으로 가란 말이 3번 박스가X, 3번 순서O ) Step 1. 현재 책이 현재 박스에 들어가는 지 판단. --> 현재 책이 현재 박스에 들어가면 Step2로 --> ..
백준 11034 : 캥거루 세마리2(그리디) ** www.acmicpc.net/problem/11034 11034번: 캥거루 세마리2 여러개의 테스트 케이스로 이루어져 있으며, 세 캥거루의 초기 위치 A, B, C가 주어진다. (0 < A < B < C < 100) www.acmicpc.net 수직선, 캥거루 세마리, 바깥 쪽 중 한마리가 두 마리 사이의 정수로 캥거루가 움직일 수 있는 최대? 문제 풀이: 캥거루 세 마리의 좌표를 x,y,z라 하자. 좌표 y에 있는 캥거루는 움직이지 못한다. x-y 와 y-z 중 더 거리가 먼 거리를 찾은 것보다 1 적게 이동할 수 있다. if __name__=='__main__': while True: try: coords = sorted(list(map(int,input().split()))) d = max(coor..
백준 2720 : 세탁소 사장 동혁 (그리디) ** www.acmicpc.net/problem/2720 2720번: 세탁소 사장 동혁 각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다. www.acmicpc.net 거스름돈 문제 거스름돈 = 5달러 이하 쿼터(0.25$), 다임(0.1$), 니켈(0.05$), 페니(0.01$) 손님이 받는 동전의 갯수를 최소로! Input : # of test case = T # 거스름 돈 ( T번 ) Output : # of 쿼터, # of 다임, # of 니켈, # of 페니 ( Q, D, N, P) 풀이: 0.25*Q + 0.1*D + 0.05*N + 0.01*P = 거스름돈, 단, Q+D+N+P = 최소 금액이 큰 순으로 나눠주면 된다. def sol..
백준 3004 : 체스판 조각 www.acmicpc.net/problem/3004 3004번: 체스판 조각 상근이는 3003번에서 동혁이가 발견한 체스판을 톱으로 자르려고 한다. 상근이는 체스판을 최대 N번 자를 수 있으며, 변에 평행하게만 자를 수 있다. 또, 자를 때는 체스판의 그 변의 한쪽 끝에서 www.acmicpc.net if __name__=='__main__': N = int(input()) if N==0: ans = 1 elif N%2 == 0 : ans=(N//2+1)**2 else : ans = (N//2+1)*(N//2+2) print(ans) N=0일 때가 코너 케이스이다. 평행하게 자른다고 하였으니, 최대의 조각을 내려면 매번 그 전 방향의 수직으로 잘라야만 한다. 증명: 컷팅 N번 중, 세로에 평행하게 n번,..