본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Silver 5][Python] 16435번 : 스네이크버드

by 빛밤하늘 2021. 5. 27.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

16435번: 스네이크버드

첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다. 두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다.

www.acmicpc.net

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin

# 첫 번째 줄에 과일의 개수 N, 스네이크버드의 초기 길이 정수 L을 공백으로 구분해 입력합니다.
# 1 <= N <= 1,000
# 1 <= L <= 10,000
# 각각 정수형으로 변환합니다.
N, L = map(int, stdin.readline().split(' '))
# 두 번째 줄에는 과일의 높이 hi들을 공백으로 구분해 입력합니다.
# 각각 정수형으로 변환하고 리스트 변수에 넣어줍니다.
his = list(map(int, stdin.readline().split(' ')))

# 스네이크버드가 과일을 가장 많이 먹는 방법을 구하면 되므로 
# 높이가 가장 낮은 과일부터 하나씩 먹어가면 스네이크버드의 길이를 최대로 늘릴 수 있습니다.
# hi들을 오름차순으로 정렬합니다.
his.sort()

# 정렬된 hi들을 하나씩 반복해봅니다.
for hi in his:
    # 현재 스네이크버드의 길이가 현재 과일의 높이보다 길거나 같다면 
    if L >= hi:
        # 과일을 먹을 수 있으므로 스네이크버드의 길이에 1을 더합니다.
        L += 1
    # 현재 스네이크버드의 길이가 현재 과일의 높이보다 작다면
    else:
        # 더 이상 과일을 먹지 못하므로 반복문을 탈출합니다.
        break

# 스네이크버드의 최대 길이를 출력합니다.
print(L)

결과

 

맞았습니다 결과를 보고 나서 다른 사람들의 파이썬 결과들을 보니

실행 시간이 60ms 대에 있는 사람들이 많았습니다.

그리고 문제 카테고리를 보니 그리디 알고리즘을 의도한 문제였는데,

실행 시간을 더 줄일 수 있는 방법이 그리디 알고리즘에 있었는지 다시 공부해봐야겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글