문제
https://www.acmicpc.net/problem/11399
사용 언어
Python3
풀이 과정
실버 III이고 문제 설명이 좀 길어서 그래도 좀 난이도가 있겠거니 생각했는데 생각만 하면 코드는 정말 간단한 문제였다!
각자가 돈을 인출하는 데 걸리는 시간이 다르기 때문에 사람들이 줄을 서는 순서에 따라서, 기다리는 시간이 차이가 나게 되는데 각자가 기다린 시간을 합쳤을 때의 시간이 최소가 되게 하는 문제였다.
따라서 간단하게 돈을 인출하는 데 오래걸리는 사람이 앞에 있으면 모두가 뒤에서 기다려야 하므로,
걸리는 시간을 오름차순 정렬하고 앞에서부터 더해주면 그게 답이 되는 것이다.
그렇게 풀고 한 번에 맞았습니다!!
제출 답안
from sys import stdin
input = stdin.readline
people = int(input())
time = list(map(int, input().split()))
minTime = 0
time.sort()
for i in range(people):
for j in range(i+1):
minTime += time[j]
print(minTime)
다른 사람 코드
나는 이중 for문을 사용하고 range를 이용해 인덱스를 돌았는데, 사실 원소값에 직접 접근하는게 가장 빠르다는 것을 공부했었다!! 그리고 그걸 잘 쓰신 아래 코드...
a = int(input())
l = []
total = 0
cur = 0
l = list(map(int, input().split()))
l.sort()
for x in l:
cur += x
total += cur
print(total)
➡ 2년 전임을 감안해도 내 코드와 차이가 꽤 난다. 원소에 직접 접근해서 cur에 걸리는 시간을 더하고 total에 또 더하는 방식을 생각한 게 포인트인데 나도 이런 코드가 먼저 생각나도록 연습해야겠다.
'코딩 테스트 스터디 > 백준' 카테고리의 다른 글
[실버 III] 2579번. 계단 오르기 (0) | 2022.06.11 |
---|---|
[실버 III] 9461번. 파도반 수열 (0) | 2022.05.29 |
[골드 V] 1753번. 최단경로 (0) | 2022.05.27 |
[실버 IV] 1676번. 팩토리얼 0의 개수 (0) | 2022.05.26 |
[실버 IV] 17219번. 비밀번호 찾기 (0) | 2022.05.25 |