switch

[파이썬]백준 38050396번 본문

알고리즘문제

[파이썬]백준 38050396번

5witch 2022. 1. 24. 22:34

첫 알고리즘 게시글..

 

원래는 자바 연습하면서 알고리즘게시판을 쓰려고했는데...  자바 공부할시간이 별로없음

 

출처-백준

 

 

시간이 없어서 백준에서 스샷찍어왔다

 

이 문제는 2번째 입력한 리스트의

 

1번 + 2번=(1번+2번) + 3번=(2번+3번) .... ?  아니뭔가 이상함

 

아무튼 저런식으로 전부 다 더해야한다  3 1 4 3 2 = 3 4 8 11 13 을 더하는 방식 (ㅈㅅ 설명을 잘 못하는듯)

 

이제 저기서 출력을 최솟값을 구하라고 했음

 

처음숫자들은 뒷 숫자 갯수만큼 계속 더해질테니까  처음에 작은수를 둬야 최솟값이됨 

 

즉 정렬을 하면된다!

 

import sys

N = int(sys.stdin.readline())
L = list(map(int,sys.stdin.readline().split()))

> 일단 시간초과날까봐 import sys를 해줘서 sys.stdin.readline으로 입력값을 받는다

 

 

 

L.sort()
L2 = []
A = 0

> 리스트를 정렬하고 (보통 그냥 sort쓰면 시간초과뜨던데 이문제는 잘되길래 걍씀)  다른 리스트를 하나 더 만들고 변수하나를 만들어준다.

 

 



for i in L:
    A = A+i
    L2.append(A)
print(sum(L2))

> 정렬된 리스트 요소를 하나씩 넣어서 이전값(A)와 더해준 뒤  만들어둔 빈 리스트(L2)에 넣어준다음 sum(L2)로 전체합을 구해줌

 

 

 

 

* 전체코드

import sys

N = int(sys.stdin.readline())
L = list(map(int,sys.stdin.readline().split()))

L.sort()
L2 = []
A = 0
for i in L:
    A = A+i
    L2.append(A)
print(sum(L2))

 

 

 

Comments