728x90
문제 (링크)
https://www.acmicpc.net/problem/13305
나의 풀이
n = int(input())
ans = 0
cities = list(map(int, input().split()))
prices = list(map(int, input().split()))
min_price = 1000000000
min_price_index = -1
for i in range(n-1):
if prices[i] < min_price:
min_price = prices[i]
min_price_index = i
for i in range(n-1):
if i == min_price_index:
ans += (prices[i] * sum(cities[i:]))
break
else:
ans += (prices[i] * cities[i])
print(ans)
풀이법 및 코드 설명
아이디어 자체는 금방 떠올릴 수 있었다.
가격 가장 적은 도시에서 최대한 많이 사고, 그 외의 도시에서는 당장 이동하는데 필요한 만큼만 사주면 되는 문제였다.
가격이 가장 적은 곳을 첫 번째 for문을 통해 찾아주었다. 아마 굳이 for문을 직접 작성해주는게 아닌 다른 함수를 호출해서 사용할 수도 있었겠지만, 당장 기억이 나지 않아서 그냥 for문으로 처리해줬다.
이후 두 번째 for문에서는 앞서 구한 최소 가격의 인덱스가 나오면 앞으로 필요한 기름을 모두 사고, 그렇지 않으면 당장 이동에 필요한 기름만 사도록 구현해주었다.
하지만 부분 점수만 받고 통과하지 못했다.
다른 풀이
n = int(input())
cities = list(map(int, input().split()))
prices = list(map(int, input().split()))
ans = 0
min_price = prices[0]
for i in range(n-1):
if prices[i] < min_price:
min_price = prices[i]
ans += min_price * cities[i]
print(ans)
이전 코드처럼 최소 가격을 구하기 위해 따로 반복문을 도는 것이 아닌, 가격을 실제로 더하는 과정에서 최소 가격을 확인해줄 수 있다.
'알고리즘 > 문제풀이' 카테고리의 다른 글
[백준] 2579번 계단 오르기 - 파이썬(Python) (0) | 2021.08.19 |
---|---|
[백준] 1931번 회의실 배정 - 파이썬(Python) (0) | 2021.08.01 |
[백준] 1003번 피보나치 함수 - 파이썬(Python) (0) | 2021.04.26 |
[프로그래머스] 정수삼각형 - 파이썬(Python) (0) | 2021.04.25 |
[프로그래머스] 크레인 인형뽑기 게임 - 파이썬(Python) (0) | 2021.04.22 |