본문 바로가기
알고리즘/BOJ

[BOJ] 11399번 ATM / 사용언어 : 파이썬(python)

by 바른 호랑이 2021. 12. 24.
728x90
반응형

※ 문제링크

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

해당 문제는 그리디 알고리즘을 사용할 수 있는 문제로, 사실 그리디 알고리즘을 잘 몰라도 풀 수 있는 문제였다. 조건을 간단히 말하면, 인출시간이 짧은 사람부터 오름차순으로 정렬한 후 인출시간을 구하면 되는 문제였다. 풀이방법과 코드는 아래와 같다.

1. 입력값으로 받은 사람들의 인출시간으로 리스트를 만들고, 해당 사람들의 인덱스 리스트를 추가로 만든다.

2. 2개의 리스트를 합쳐 2차원 리스트를 만들고, 인출시간을 기준으로 리스트를 정렬해준다.

3. 해당 순서대로 인출시간 총합을 구하고 그 값을 출력한다.

 

N = int(input())
p_list = [x for x in range(1, N+1)]
t_list = list(map(int, input().split()))
pt_list = []
for i in range(N):
    pt_list.append([p_list[i], t_list[i]])
pt_list.sort(key = lambda x: x[1])
value = 0
for i in range(N):
    value += pt_list[i][1] * (N-i)
print(value)

 

P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글