📝 문제 설명
>
[문제 요약]
한 봉우리에는 한 명씩 서 있다. (정황상 한조가 서있는듯하다)
자신보다 더 낮은 봉우리에 있는 적들만 처치할 수 있다. 방향은 오른쪽이다.
더 높은 봉우리에 있는 적을 만나면 포기하고 드러눕는다.
이 중 최고의 활잡이가 최대 몇 명을 처치할 수 있는 지를 구하라!
https://www.acmicpc.net/problem/14659
🎨 풀이
💡 전체 코드
import sys
N = int(sys.stdin.readline())
hanzo = list(map(int, sys.stdin.readline().split()))
winner = hanzo[0]
result = []
count = 0
for i in range(1,len(hanzo)):
if winner < hanzo[i]:
winner = hanzo[i]
result.append(count)
count = 0
else :
count += 1
if i == len(hanzo)-1:
result.append(count)
print(max(result))
> 핵심 : for문 돌리면서 비교해보기!
🍦 코드 설명 (실행 순서대로 나열)
# main
N = int(sys.stdin.readline())
hanzo = list(map(int, sys.stdin.readline().split()))
winner = hanzo[0]
result = []
count = 0
1. N을 입력받는다.
- N : 봉우리 수 = 활잡이 수
2. hanzo를 입력받는다.
- hanzo : 활잡이가 올라가있는 봉우리들 리스트
3. winner에 hanzo[0]을 먼저 넣어준다.
- winner : 현재 승자
4. result, count
- result : 각각 승자가 이긴 활잡이 수 리스트
- count : 누적 승리수
@ for문 (5번~12번)
for i in range(1,len(hanzo)):
if winner < hanzo[i]:
winner = hanzo[i]
result.append(count)
count = 0
else :
count += 1
if i == len(hanzo)-1:
result.append(count)
5. for문을 돌린다. (1부터 len(hanzo)-1까지)
6. 만약 winner 봉우리 높이가 hanzo[i]보다 크다면! (6~9번)
7. winner에 hanzo[i]를 넣고
8. result에는 count를 넣어준다. (최고의 활잡이였던 친구의 누적되어있던 count를 result에 넣어주는 거!)
9. count를 0으로 초기화한다.
10. winner 봉우리가 hanzo[i]보다 크지 않다면! (10번~12번)
11. count += 1 을 해준다.
12. 만약 i가 len(hanzo)-1라면 result에 count를 넣어준다.
- 마지막이기 때문에 result에 넣어주고 for문을 종료하는 것이다
13. max(result)를 출력하면 된다.
끝~
⭐ 느낀점
> 잘 풀고 설명한 것 같다. 하하. 고생했따~
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 14720번 - 우유 축제 (파이썬) (0) | 2022.08.03 |
---|---|
[백준] 10250번 - ACM 호텔 (파이썬) (0) | 2022.08.01 |
[백준] 2869번 - 달팽이는 올라가고 싶다 (파이썬) (0) | 2022.07.30 |
[백준] 2864번 - 5와 6의 차이 (파이썬) (0) | 2022.07.29 |
[백준] 17478번 - 재귀함수가 뭔가요? (파이썬) (0) | 2022.07.28 |