알고리즘/그리디(11)
-
[백준] 19941번 : 햄버거 분배 (Python)
https://www.acmicpc.net/problem/19941 19941번: 햄버거 분배 기다란 벤치 모양의 식탁에 사람들과 햄버거가 아래와 같이 단위 간격으로 놓여 있다. 사람들은 자신의 위치에서 거리가 $K$ 이하인 햄버거를 먹을 수 있다. 햄버거 사람 햄버거 사람 햄버거 사 www.acmicpc.net 💡 문제 접근 최대한 왼쪽에 있는 햄버거를 우선적으로 먹어야함 햄버거 먹으면 다른 문자로 바꿔주기 💡 내 코드 # 햄버거 분배 n,k = map(int,input().split()) hp =list(input()) cnt=0 for i in range(n): for j in range(i-k,i+k+1): # 거리 안에 있는 햄버거 찾기 if hp[i]=='P': # 현재 위치가 사람일때 if ..
2023.03.16 -
[백준] 20115번 : 에너지 드링크 (Python)
https://www.acmicpc.net/problem/20115 20115번: 에너지 드링크 페인은 에너지 드링크를 좋아하는 회사원이다. 에너지 드링크는 카페인, 아르기닌, 타우린, 나이아신 등의 성분이 들어있어 피로 회복에 도움을 주는 에너지 보충 음료수이다. 야근을 마치고 한 www.acmicpc.net 💡 내 코드 n = int(input()) k = list(map(int,input().split())) k = sorted(k, reverse=True) cnt = k[0] for i in range(1,n): cnt += (k[i]/2) print(str(cnt).rstrip('0').rstrip('.')) 💡 주의 소수점 불필요한 0 없애기
2023.03.16 -
[백준] 20300번 : 서강근육맨 (Python)
https://www.acmicpc.net/problem/20300 20300번: 서강근육맨 PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다. www.acmicpc.net 💡 문제 접근 운동기구가 짝수일 때와 홀수일 때를 각각 생각해야함 짝수일 때는 가장 작은 값과 큰 값을 짝지어서 더해주고 홀수일 때는 가장 큰 값을 혼자 두기 💡 내 코드 # 서강근육맨 n = int(input()) m= list(map(int,input().split())) m= sorted(m) # 기구 근손실 작은 값부터 정렬 result= [] if n % 2 ==0: # 운동기구 수 짝수일 때 j = n-1..
2023.03.16 -
[백준] 11508번 : 2+1 세일 (Python)
https://www.acmicpc.net/problem/11508 11508번: 2+1 세일 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 www.acmicpc.net 💡 문제 접근 최대한 비싼 것을 할인 받으면 최소 금액을 계산할 수 있음 비싼 순으로 정렬하기 모든 가격을 더한뒤 할인 가격 빼주기 💡 내 코드 n = int(input()) m = [int(input()) for i in range(n)] m=sorted(m,reverse=True) # 비싼 것 순으로 정렬 #일단 모든 값을 계산 sum = 0 for i in m: sum += i #..
2023.03.15 -
[백준] 1758번 : 알바생 강호 (Python)
https://www.acmicpc.net/problem/1758 1758번: 알바생 강호 첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같 www.acmicpc.net 💡 문제 접근 팁이 비싼 순으로 정렬하여 계산 💡 내 코드 n = int(input()) tip = [int(input()) for i in range(n)] tip.sort(reverse = True) cnt=0 idx=0 for i in tip: idx += 1 t= i -(idx-1) if t< 0: continue cnt += t print(cnt)
2023.03.15 -
[백준] 13305번 : 주유소 (Python)
https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 💡 문제 접근 가장 싼 주유소를 찾아야 함 이외에는 당장 가야 할 거리만큼만 계산함 => 아이디어 오류, 가장 싼 주유소가 아니라도 현재가 미래의 주유소들보다 싸다면 미리 구매해야 함 💡 해결 이동하면서 최저 주유소 값을 갱신 해줌 💡 내 코드 n = int(input()) d = list(map(int, input().split())) m = list(map(int, input()..
2023.03.15 -
[백준] 2217번 : 로프 (Python)
https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 💡 내 코드 n= int(input()) r=[] for i in range(n): a=int(input()) r.append(a) r= sorted(r,reverse=True) w=[] for i in range(1,n+1): w.append(r[i-1]*i) w_max=max(w) print(w_max)
2023.03.13 -
[백준] 11399번 : ATM (Python)
https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 💡 코드 # ATM n = int(input()) p = list(map(int, input().split())) p = sorted(p) sum=0 result=0 for i in p: sum+=i result+=sum print(result)
2023.03.13