백준 알고리즘

백준 - 28061번 레몬 따기 python 문제풀이 [Hellfer]

Hellfer 2023. 12. 17. 13:46
728x90

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이 됩니다.

 

🤗파이팅입니다~ 여러분!!🤗

 

728x90