#13305

zzwwoonn·2022년 5월 15일
0

Algorithm

목록 보기
23/71

문제를 보자마자 벙 쪘다.. 어떻게 풀어야 할 지 감이 오지 않았다. 처음엔 모든 경우의 수를 다 방문해보면 되지 않나? 라고 생각했고 도시의 개수 N이 2 이상 100,000 이하라는 걸 보고 아닐 거라는 걸 알았다.

아이패드가 왔다. 공부하기에 최상의 조건이 갖춰졌다. 물론 장인은 도구를 탓하지 않는다. 하지만 장인에게도 보다 더 좋은 도구가 있다면 이전에 비해 훨씬 뛰어난 결과를 내보일 수 있을 것이 분명하다. 아이패드가 있으면 더 좋을텐데와 같은 댈 수 있는 핑계도 없다. 쫄지 말고 머리부터 박자. 남 눈치 보지말고 나만의 페이스대로 간다. 할 수 있다. 끝까지 가면 내가 무조건 이긴다. 항상 그래왔으니까. 일단 뭐든 해보자. 뭐든 할 수 있는 나이가 아닌가. 절대 늦지 않았다.

도대체 어떻게 풀어야 할 지 모르겠더라. 문제를 보고 어떻게 풀 지 생각하는데 시간이 꽤 걸렸고 그래서 문제 분류를 봤다.

그리디 알고리즘

아 드디어 그리디 알고리즘 이구나... 학부과정에서 한번 배우긴 했지만 개념을 정확하게는 모르고 있었기에 구글링과 유튜브에 나와있는 강의들을 통해 개념부터 익혔다. 이 내용은 따로 포스팅을 해서 기록해두려고 한다. 두고두고 봐야지 이래놓고 안봄

핵심은 바로

매번 그 순간에 가장 최적인 답을 고른다 => 근시안적인 선택
관찰을 통해 탐색 범위를 줄인다

이 문제에 적용해보면

도시의 기름값(price) 배열을 탐색하면서 현재의 최저값(minimum price)보다 더 작은 값이 나오면 현재의 최저값을 해당 값으로 갱신한다.

제일 처음 기름값을 minPrice 라 두고 for문을 순회한다. 그 끝은 항상 answer(그 때까지 갈 때 얼마인지 => 현재의 최저값 * 거리)의 계산이다.

N = int(input())
distanceList = []
priceList = []
answer = 0

distanceList = list(map(int, input().split()))
priceList = list(map(int, input().split()))

minPrice = priceList[0]

for i in range(N-1):
    if minPrice > priceList[i]:
        minPrice = priceList[i]
    answer += minPrice * distanceList[i]

print(answer)

그에게 주어지는 합격 목걸이

맞췄습니다!!!

0개의 댓글