[Python] Softeer - 징검다리
문제설명
남북으로 흐르는 개울에 동서로 징검다리가 놓여져 있다.
이 징검다리의 돌은 들쑥날쑥하여 높이가 모두 다르다. 철수는 개울의 서쪽에서 동쪽으로 높이가 점점 높은 돌을 밟으면서 개울을 지나가려고 한다.
돌의 높이가 서쪽의 돌부터 동쪽방향으로 주어졌을 때 철수가 밟을 수 있는 돌의 최대 개수는?
제약조건
1 ≤ N ≤ 3×103 인 정수
1 ≤ Ai ≤ 108 인 정수
입력형식
첫 번째 줄에 돌의 개수 N이 주어진다.
두 번째 줄에 돌의 높이 Ai (1 ≤ i ≤ N)가 서쪽부터 동쪽으로 차례로 주어진다.
출력형식
첫 번째 줄에 철수가 밟을 수 있는 돌의 최대 개수를 출력하라.
입력예제1
5 3 2 1 4 5
출력예제1
3
구현 코드
import sys
stone_num = int(sys.stdin.readline())
arr= list(map(int, sys.stdin.readline().split()))
dic = {}
num_list = []
for idx, value in enumerate(arr):
if idx==0:
dic[value] = 1
else:
max=0
for i in range(len(arr[:idx])):
if arr[i] < value:
if dic[arr[i]]>max:
max=dic[arr[i]]
dic[value] = max+1
maxCount = 0
for k, v in dic.items():
# print(k, v)
if v > maxCount:
maxCount = v
print(maxCount)
설명
- 간단한 그리디 알고리즘
- 철수가 동쪽으로 진행하면서 서쪽에서 동쪽으로 이동 가능한 돌을 판별하는 방식으로 동작
- 동쪽 돌의 높이가 더 높거나 같으면 해당 서쪽 돌은 밟을 수 없게 되며, 반대로 서쪽 돌의 높이가 더 높거나 같으면 동쪽 돌은 밟을 수 없음
- 각 돌에 대해 밟을 수 있는지 여부를 판단하고, 그 결과를 합산하여 최대로 밟을 수 있는 돌의 개수를 계산
- 시간복잡도: O(N), N은 돌의 갯수
'Algorithm(Python)' 카테고리의 다른 글
[Python] Softeer 우물 안 개구리 (1) | 2023.11.03 |
---|---|
[Python] 백준 - 토마토 (bfs) (0) | 2023.10.30 |
[Python] 프로그래머스 - 거리두기 확인하기(dfs) (0) | 2023.10.30 |
[Python] 프로그래머스 - 피로도 (dfs) (1) | 2023.10.10 |
[Python] 프로그래머스 - 미로탈출 (bfs) (2) | 2023.10.10 |