티스토리 뷰
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
강의 목록
Chatper 2. 기초 알고리즘
13강. 그리디 알고리즘 소개
14강. 그리디 사용예제 1
15강. 그리디 사용예제 2


문제 11399번: ATM
쉬운 문제였다. 그런데, 그리디 예제라는데, 그냥 정렬 문제 아닌가? 최소 시간 구하려면 당연히 정렬해야 하니까.
내가 푼 풀이
N = int(input())
P = list(map(int, input().split()))
P.sort()
total_time = []
for i in range(len(P)):
if i == 0:
waiting_time = P[i]
else:
waiting_time = total_time[i-1] + P[i]
total_time.append(waiting_time)
print(sum(total_time))
강사 풀이
P = sorted(P)
waiting = [0] * N
waiting[0] = P[0]
for i in range(1, N):
waiting[i] = waiting[i -1] + P[i]
print(sum(waiting))
나보다 더 깔끔했던 부분
1. waiting[0] = P[0] 으로 심플하게 초기화
2. append도 괜찮지만, 인덱스로 바로 할당하는 게 더 깔끔한 듯 ㅎㅎ
문제 2: 2874번: 검정 직사각형
내 풀이
N = 4
levels = [5,3,7,5]
levels.reverse()
count = 0
for i in range(1, len(levels)):
while levels[i] >= levels[i-1]:
levels[i] -= 1
count += 1
print(count)
강사 풀이
N = int(input())
L = [0] * N
for i in range(N):
L[i] = int(input())
count = 0
for i in range(N-2, -1, -1):
if L[i] >= L[i+1]:
count += L[i] - (L[i+1] -1)
L[i] = L[i+1] -1
print(count)
나도 답은 맞았지만, 강사님의 풀이가 더 좋다.
강사님 코드가 더 나은 이유
나는 while로 루프를 훨씬 많이 돎. 강사님 코드는 한 번의 계산으로 필요한 만큼 바로 구했다.
내 코드에서는 이렇게 고치면 될 듯
levels[i] -= levels[i] - (levels[i-1] - 1)


Abit.ly 다운받기
abit.ly
'Python > 코딩테스트' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 13일차 : 네카라쿠배 취업 끝장내는 파이썬 코딩테스트 마스터 (0) | 2025.04.13 |
---|---|
패스트캠퍼스 환급챌린지 12일차 : 네카라쿠배 취업 끝장내는 파이썬 코딩테스트 마스터 (1) | 2025.04.12 |
패스트캠퍼스 환급챌린지 10일차 : 네카라쿠배 취업 끝장내는 파이썬 코딩테스트 마스터 (0) | 2025.04.10 |
패스트캠퍼스 환급챌린지 9일차 : 네카라쿠배 취업 끝장내는 파이썬 코딩테스트 마스터 (2) | 2025.04.09 |
패스트캠퍼스 환급챌린지 8일차 : 네카라쿠배 취업 끝장내는 파이썬 코딩테스트 마스터 (1) | 2025.04.08 |