티스토리 뷰

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

 

 

강의 목록

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)

 

 

 

 

 

https://abit.ly/lisbva

 

Abit.ly 다운받기

 

abit.ly

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함