요약하자면, 주어진 데이터를 정렬 후 합 배열을 구하는 문제이다.
정말 단순하게 정렬해주는 내장함수를 써서 리스트를 정렬 후 합배열을 구해서 제출했다. 정답을 맞추긴 했지만, 오늘 공부한 삽입 정렬을 이용해서 다시 풀어봤다. 밑의 코드는 우선 처음에 제출한 코드이다.
import sys
input = sys.stdin.readline
n = int(input())
lst = list(map(int, input().split()))
s_lst = sorted(lst)
result = 0
ans = 0
for i in range(n):
result += s_lst[i]
ans += result
print(ans)
import sys
input = sys.stdin.readline
n = int(input())
lst = list(map(int, input().split()))
s = [0]*n
for i in range(1, n):
insert_point = i # 현재 인덱스 번호 저장
insert_value = lst[i] # 현재 값 저장
for j in range(i-1, -1, -1): # 현재 값 위치의 바로 전 값을 비교하면서 왼쪽으로 이동
if lst[j] < lst[i]: # 비교대상이 나보다 작으면(해당 위치에 삽입해야함)
insert_point = j+1 # 나보다 작은 값의 앞에 저장해야하니 +1
break
if j == 0: # 끝까지 탐색했을 경우(현재 값이 가장 작은 값일 경우)
insert_point = 0 # 맨 앞에 삽입
for j in range(i, insert_point, -1): # i부터 insert_point까지
lst[j] = lst[j-1] # 값들을 오른쪽으로 한 칸씩 shift
lst[insert_point] = insert_value # 삽입 위치에 현재 데이터 저장
s[0] = lst[0]
for i in range(1, n):
s[i] = s[i-1] + lst[i] # 합 배열 공식
sum = 0
for i in range(0, n):
sum += s[i]
print(sum)
어려울 건 없는 문제였지만, 포인트는 삽입 정렬과 합 배열이다.
삽입정렬은 따로 글로 정리해놨으니, 간단하게 합 배열 공식만 적어놓겠다.
s[0] = lst[0]
for i in range(1, n):
s[i] = s[i-1] + lst[i] # 합 배열 공식
s[0] = lst[0]
합 배열의 첫 번째 값에 원래 배열의 첫 번째 값 저장for i in range(1, n):
합 배열의 첫 번째 값은 다른 값을 더할 필요가 없기 때문에 인덱스 번호 1
부터 loop 시작s[i] = s[i-1] + lst[i]
이전 합 배열 값에 원래 배열의 현재 값 더해서 저장