백준 - 28061번 레몬 따기 python 문제풀이 [Hellfer]
https://www.acmicpc.net/problem/28061
28061번: 레몬 따기
성우는 숲에서 레몬을 따와야 한다. 숲은 하나의 수직선으로 표현할 수 있고, 여기에는 레몬 나무 \(N\)그루가 \(x=1\)부터 \(x=N\)까지 일정한 간격으로 자라 있다. 성우는 현재 \(x=0\)에 있으며, 집은
www.acmicpc.net
🔷 알고리즘 분류 - 수학, 사칙연산 난이도 - 브론즈 3
🔶글쓴이 문제풀이 - 구현을 이용한 풀이(틀린 풀이)
n = int(input())
x = list(map(int, input().split()))
count = 0
max = 0
for i in range(n):
if x[i] > max:
max = x[i]
count = i+1
k = (n + 1) - count
result = max - k
print(result)
🔶문제풀이 - 구현을 이용한 풀이
N = int(input()) # 나무의 개수 입력
x = list(map(int, input().split())) # 각 나무에 자라 있는 레몬의 개수 입력
max = 0 # 최대 레몬 개수
for i in range(N):
if x[i] > max: # 현재 나무의 레몬 개수가 최대 개수보다 크면 최대 개수를 갱신
max = x[i]
if max > 0: # 최대 개수가 0보다 크면 레몬을 하나 채집하므로 최대 개수를 1 감소
max -= 1
print(max) # 최대 레몬 개수 출력
🔶문제 이해하기
아래와 같은 입력값이 있다고 가정해 보겠습니다.
3
2 3 4
1. 초기 상태에서 max = 0입니다.
2. 첫 번째 나무에서 레몬 개수인 2가 max보다 크기 때문에 max를 2로 갱신합니다.
3. max가 0보다 크므로 max를 1 감소시킵니다. 이제 max = 1입니다.
4. 두 번째 나무에서 레몬 개수인 3은 max보다 크기 때문에 max를 3으로 갱신합니다.
5. max가 0보다 크므로 max를 1 감소시킵니다. 이제 max = 2입니다.
6. 세 번째 나무에서 레몬 개수인 4는 max보다 크기 때문에 max를 4로 갱신합니다.
7. max가 0보다 크므로 max를 1 감소시킵니다. 이제 max = 3입니다.
8. 따라서 출력값은 3이 됩니다.
아래와 같은 입력값이 있다고 가정해 보겠습니다.
4
100 97 90 12
1. 초기 상태에서 max = 0입니다.
2. 첫 번째 나무에서 레몬 개수인 100이 max보다 크기 때문에 max를 100으로 갱신합니다.
3. max가 0보다 크므로 max를 1 감소시킵니다. 이제 max = 99입니다.
4. 두 번째 나무에서 레몬 개수인 97은 max보다 작기 때문에 아무런 변화가 없습니다.
5. max가 0보다 크므로 max를 1 감소시킵니다. 이제 max = 98입니다.
6. 세 번째 나무에서 레몬 개수인 90은 max보다 작기 때문에 아무런 변화가 없습니다.
7. max가 0보다 크므로 max를 1 감소시킵니다. 이제 max = 97입니다.
8. 네 번째 나무에서 레몬 개수인 90은 max보다 작기 때문에 아무런 변화가 없습니다.
9. max가 0보다 크므로 max를 1 감소시킵니다. 이제 max = 96입니다.
10. 따라서 출력값은 96이 됩니다.
🤗파이팅입니다~ 여러분!!🤗