알고리즘/PYTHON

알고리즘 with 파이썬 (4) - 그리디

뚜벅-뚜벅 2021. 4. 5. 20:16

그리디: 지금 당장 좋은것을 고르는 방법. 현재의 선택이 나중에 미칠 영향을 고려하지 않을때 사용

 

Ex ) 큰 수의 법칙 예제

입력받은 숫자들을 M 번 더해 가장 큰 수를 만들어라

 

첫줄에 숫자 세개를 입력받는다 = 배열 크기 N, 숫자 더해지는 횟수 M, 연속더하기 가능한 수 K
# 2<= N <=1000
# 1<= M <= 10000
# 1<= K <=10000
둘째 줄에 더하기를 실행할 자연수 N개를 입력받는다

 

#N, M, K 를 공백으로 구분하여 입력받기
n,m,k = map(int, input("숫자 세개 입력").split())
#N개의 수를 공백으로 구분하여 입력받기
data = list(map(int,input("숫자배열입력").split()))

data.sort() # 입력받은 수들 정렬하기
first = data[n-1] #가장큰수
second = data[n-2] # 두번쨰로 큰수

result = 0

while True:
    for i in range(k): # 가장 큰 수를 K번 더하기
        if m==0: #m이 0이면 반복문 탈출
            break
        result+=first
        m-=1
        if m==0:
            break
        result+=second
        m-=1

print(result)

 

알고리즘은 맞았지만, 입력받고 정렬하는데에서 시간을 많이 쏟았다

파이썬의 문법에 아직 약해서그런 것 같다. 입출력을 숫자로 받는건 자주 사용될 것 같으니 꼭 기억할 것

 - split(): str 값을 매개변수를 기준으로 쪼갠다. 

 - list(): 쪼개진 값들을 배열 인자로 받는다 (사실 split 한채로만 넣어도 배열로 들어가는데, map이 먹질 않는다)

 - map(자료형, 자료) : 자료들을 특정 자료형으로 바꾼다.

 - sort 로 숫자 배열을 빠르게 정렬할 수 있다 (나는 모르고 크기 비교하는 함수를 만들어버렸다)

 

알고리즘을 공부하다보니 파이썬 문법에 대한이해가 시간단축의 key가 될것 같다