※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 32609번 문제인 Beaking Spackwards이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/32609
문자열에 등장하는 서로 같은 문자는 항상 한 곳에 뭉쳐있다면, 해당 문자를 포함하는 팰린드롬 문자열은 그 뭉쳐있는 부분문자열의 팰린드롬 문자열뿐임을 어렵지 않게 관찰할 수 있다. 또한, 같은 문자가
한편, 주어진 수에 그보다 작거나 같은 가장 큰 삼각수를 뺄 때마다 그 크기가 대략적으로 제곱근을 씌운 것과 같이 변한다. 따라서 주어진 개수 이하의 팰린드롬을 만들 수 있는 단일문자 반복 문자열을 하나씩 이어붙이는 것으로도 문자 종류가 부족할 일 없이 문제를 충분히 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N;
char c = 'a';
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
while (N) {
int val = 0;
while ((val + 1) * (val + 2) / 2 <= N) val++;
N -= val * (val + 1) / 2;
while (val--) cout << c;
c++;
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 20161 // C++] 왜 동전은 하나씩만 뒤집는 거야 (1) | 2024.11.12 |
---|---|
[BOJ 9910 // C++] Progress (1) | 2024.11.11 |
[BOJ 28090 // C++] 특별한 한붓그리기 (3) | 2024.11.07 |
[BOJ 32521 // C++] 팩트는 트리가 건강해지고 있다는 거임 (2) | 2024.11.06 |
[BOJ 32525 // C++] Duality (1) | 2024.11.05 |