본문 바로가기
코딩테스트

[Softeer 연습문제] 징검다리

by hammii 2024. 3. 25.

https://softeer.ai/practice/6293

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

안녕하세요.

HSAT 를 준비하면서 이번에는 Level 3 문제를 한번 풀어보았습니다.

 

문제

남북으로 흐르는 개울에 동서로 징검다리가 놓여져 있다.

 

이 징검다리의 돌은 들쑥날쑥하여 높이가 모두 다르다. 철수는 개울의 서쪽에서 동쪽으로 높이가 점점 높은 돌을 밟으면서 개울을 지나가려고 한다.

 

돌의 높이가 서쪽의 돌부터 동쪽방향으로 주어졌을 때 철수가 밟을 수 있는 돌의 최대 개수는?

제약조건

1 ≤ N ≤ 3×103 인 정수

1 ≤ Ai ≤ 108 인 정수

 

입력형식

첫 번째 줄에 돌의 개수 N이 주어진다.

두 번째 줄에 돌의 높이 Ai (1 ≤ i ≤ N)가 서쪽부터 동쪽으로 차례로 주어진다.

 

출력형식

첫 번째 줄에 철수가 밟을 수 있는 돌의 최대 개수를 출력하라.

 

입력예제1

5 3 2 1 4 5

출력예제1

3

 

풀이

dolmange 배열에 돌의 높이를 넣어준 후,

Dynamic Programming 기법을 사용하여 dp 배열에 밟을 수 있는 돌의 최대 개수를 넣어줬습니다.

이전 돌의 높이들을 비교하는데 max 값을 활용하여 비교했습니다.

import sys

N = int(input())
dolmange = list(map(int, input().split()))
dp = [1] * N

for i in range(1, N):
    max_before = 0
    for j in range(0, i):
        if dolmange[i] > dolmange[j]:
            max_before = max(max_before, dp[j])
    dp[i] = max_before + 1
    
print(max(dp))