본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 스네이크 버드 : 16435번 - Python

728x90
반응형

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

 

16435번: 스네이크버드

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

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

- 변수 선언 위치에 따라서 초기화 되는 시기가 다름.

 

 

 

문제의 접근 방법

 

- 오름차순 정렬

- 단순하게 생각하고 접근하기

 

 

 

내가 막혔던 부분

 

- 길이가 1씩 늘어나는 것에 대해 length 변수를 선언해서 값을 증가시키려고 했다.

# 처음에 잘못짰던 코드

n,s = map(int, input().split())
h = sorted(list(map(int, input().split())))

for i in range(n):
    s = s + length
    length = 0
    for j in range(len(h)):
        if h[j] <= s:
            length += 1
    del h[0]

print(s+length)

 

 

 

문제 풀이 방법

 

과일의 개수(n)와 스네이크 버드의 초기 길이(s)를 입력 받기 -> 과일들의 길이(h)를 n개만큼 입력받은 후 값 비교를 위해 정렬해서 리스트에 저장 -> n번 만큼 반복문을 돌려 리스트 h의 i번째 값이 초기 길이(s)보다 작거나 같으면 s에 1을 더하기 -> 위 과정을 반복해서 나온 최대 길이 s의 값 출력!

 

 

 

소스코드

n,s = map(int, input().split())
h = sorted(list(map(int, input().split())))


for i in range(n):
    if h[i] <= s:
        s += 1

print(s)
728x90
반응형