※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 32904번 문제인 Ordinal Number이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/32904
어떤 수 $n$를 나타내는 문자열 $s$가 있을 때, $s$의 문자를 순서대로 살펴보면서 초기값 0에 {가 등장하면 1을 더하고 }가 등장하면 -1을 더해나가면서 얻을 수 있는 중간결괏값의 최댓값을 구하자. 이 값은 $n+1$과 같게 된다. 증명은 수학적 귀납법으로 어렵지 않게 할 수 있다.
따라서 위의 관찰을 이용해 $n$을 계산하는 것으로 문제를 해결할 수 있다.
다른 풀이 방법으로, 각 수를 나타내는 문자열 $s$의 길이값의 규칙을 찾아 문제를 해결할 수도 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
char c;
int mx, val;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
while (cin >> c) {
if (c == '{') val++;
else if (c == '}') val--;
mx = max(mx, val);
}
cout << mx - 1;
}
'BOJ' 카테고리의 다른 글
[BOJ 32871 // C++] 돌 게임 nm (1) | 2024.12.10 |
---|---|
[BOJ 32902 // C++] Chips (1) | 2024.12.09 |
[BOJ 32916 // C++] Another Brick in the Wall (1) | 2024.12.06 |
[BOJ 32760 // C++] Nothing Everything (0) | 2024.12.05 |
[BOJ 32752 // C++] 수열이에요? (1) | 2024.12.04 |