https://www.acmicpc.net/problem/11399
문제를 풀면서 몰랐던 개념
(1) [Python] 한 줄에 정수형 변수 여러개 입력받기
-> 리스트에 map 함수를 사용하기!!
'map'은 리스트이 요소를 지정된 함수로 처리해주는 함수이다. map은 원본 리스트를 변경하지 않고 새 리스트를 생성한다.
a = list(map(int, input().split()))
10 20 # (입력)
>>> print(a)
[10, 20]
# a, b = input().split() 이렇게 따로따로 입력받던 것을 간략하게 표현할 수 있음.
(2) [Python] 길이가 정해진 리스트 만들기
-> 리스트 길이를 지정한 후 0으로 초기화 하는 반복문 코드를 입력해주기(list comprehension)
list = [0 for i in range(n)]
# 0으로 초기화 된 2차원 배열을 만들고 싶다면 다음과 같이 작성
matrix = [[0 for col in range(n)] for row in range(n)]
(3) [Python] 누적 합계 구하기(for)
sum = 0
# 1~10까지 더하기
for i in range(1,11):
sum += i
print(sum) # 55출력
문제의 접근 방법
- 사람의 명수(n) 입력받기
- n번 사람이 돈을 인출하는 데 걸리는 시간 입력받기
- 인출하는 데 걸리는 시간 누적해서 더하기
- 필요한 시간의 합의 최솟값을 구할 수 있는 방법 생각하기
내가 막혔던 부분
(1) 정해진 수만큼 리스트의 길이를 정하는 방법
(2) 각 사람이 돈을 인출하는 데 걸리는 시간을 누적해서 더하는 방법
(3) 시간의 합의 최솟값을 구할 때, 가능한 경우의 수를 모두 다 더해본 후 그 중 가장 적게 걸리는 값을 구해야 한다고 생각했음 -> 어떤 순서로 줄을 서야 최소의 시간이 걸리는지 생각하지 못했다:(
문제 풀이 방법
문제에서 P1~P5를 정렬했을 때, 가장 최소의 시간이 걸린다는 것을 제시해주었다.
따라서, Pi를 입력받은 후, 리스트로 만들어서 정렬을 해준 후 각 원소들을 누적해서 더하여 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구할 수 있다!!!
소스코드
n = int(input())
P = [0 for i in range(n)]
sum = 0
min = 0
if (1<=n<=1000):
P = list(map(int, input().split()))
if len(P) == n:
P = sorted(P)
for i in range(n):
sum += P[i]
min += sum
print(min)
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] 접미사 배열 : 11656번 - Python (0) | 2021.07.16 |
---|---|
[백준] 보물 : 1026번 - Python (0) | 2021.07.16 |
[백준] 좌표 정렬하기 2 : 11651번 - Python (0) | 2021.07.16 |
[백준] 소트인사이드 : 1427번 - Python (0) | 2021.07.15 |
[백준] 수 정렬하기 : 2750번 - Python (0) | 2021.07.15 |