본문 바로가기
코딩 테스트 문제 풀이

Do it 알고리즘 코딩 테스트 - 18번

by 김복칠 2023. 11. 3.

문제.

https://www.acmicpc.net/problem/11399

 

11399번: ATM

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

www.acmicpc.net


코드.

n = int(input())
a = list(map(int,input().split()))

a.sort()
b = []

for i in range(n):
    if i == 0:
        c = a[i]
        b.append(c)
    else:
        c = b[i-1] +a[i]
        b.append(c)

x = sum(b)
print(x)
입력 값 출력 값
5

3 1 4 3 2
32

해석 및 풀이.

★ 이 문제는 임의의 수 N과 N개의 숫자만큼 입력받아 오름차순으로 배열한 뒤 각 위치에 따른 부분합을 구합니다. 그리고 그 부분합의 총 합을 구하여 출력하는 프로그램을 만드는 문제입니다.

이때 sort(reverse=True) 함수를 쓰지 않을것을 권장하는데 저는 주저없이 사용했다는 점 참고 부탁드립니다. 

n = int(input())
a = list(map(int,input().split()))

a.sort()
b = []

먼저 N개의 임의의 숫자를 받을 수 있는 input() 함수를 각각 만들어 줍니다. 이후 임의로 받은 숫자들을 오름차순 정렬을 해주고 부분합을 구해서 넣어줄 리스트 b 를 만들어 줍니다.

for i in range(n):
    if i == 0:
        c = a[i]
        b.append(c)
    else:
        c = b[i-1] +a[i]
        b.append(c)

이후 반복문을 이용하여 부분합을 구해주는데 리스트 a 의 [0]번째 인덱스는 부분합이 그 자체이기 때문에 바로 리스트 b 에 넣어주고 이후에는 부분합에 리스트 a 의 그 다음 인덱스 수를 더해 리스트 b 에 넣어줍니다.

x = sum(b)
print(x)

마지막으로 리스트 b 에 입력된 값을 sum() 함수를 이용해 총합을 구한 뒤 print로 출력해줍니다.