출처
https://softeer.ai/practice/6293
문제
언어별 시간/메모리
언어 | 시간 | 메모리 |
JavaScript | 2초 | 256MB |
C | 1초 | 256MB |
C++ | 1초 | 256MB |
Java | 2초 | 256MB |
Python | 2초 | 256MB |
남북으로 흐르는 개울에 동서로 징검다리가 놓여져 있다.
이 징검다리의 돌은 들쑥날쑥하여 높이가 모두 다르다. 철수는 개울의 서쪽에서 동쪽으로 높이가 점점 높은 돌을 밟으면서 개울을 지나가려고 한다.
돌의 높이가 서쪽의 돌부터 동쪽방향으로 주어졌을 때 철수가 밟을 수 있는 돌의 최대 개수는?
제약조건
1 ≤ N ≤ 3×103 인 정수
1 ≤ Ai ≤ 108 인 정수
입력
첫 번째 줄에 돌의 개수 N이 주어진다.
두 번째 줄에 돌의 높이 Ai (1 ≤ i ≤ N)가 서쪽부터 동쪽으로 차례로 주어진다.
출력
첫 번째 줄에 철수가 밟을 수 있는 돌의 최대 개수를 출력하라.
풀이
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
scanf("%d", &N);
vector<int> bridge(N);
vector<int> cnt(N);
for (int i = 0; i < N; i++) {
scanf("%d", &bridge[i]);
}
for (int i = 0; i < N; i++){
for (int j = 0; j < i; j++) {
if (bridge[j] < bridge[i]){
cnt[i] = max(cnt[i], cnt[j] + 1);
}
}
}
printf("%d", *max_element(cnt.begin(), cnt.end())+1);
return 0;
}
DP문제, 시간복잡도 O(N^2)로 풀 수 있다!
반응형
'알고리즘 > Softeer' 카테고리의 다른 글
[C++] Softeer Lv.3 나무 섭지 (0) | 2024.10.31 |
---|---|
[C++] Softeer Lv.2 GBC (0) | 2024.10.30 |
[C++] Softeer Lv.3 [HSAT 6회 정기 코딩 인증평가 기출] 출퇴근길 (0) | 2024.10.30 |
[C++] Softeer Lv.3 강의실 배정 (0) | 2024.10.29 |
[C++] Softeer Lv.2 [한양대 HCPC 2023] X marks the Spot (0) | 2024.10.28 |