※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2999번 문제인 비밀 이메일이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2999
2999번: 비밀 이메일
정인이는 원래 "bombonisuuladici"를 보내려고 했다. 이 메시지는 16글자이므로, 정인이는 1*16, 2*8, 4*4 행렬을 선택할 수 있다. R이 가장 큰 것은 4*4이므로, 4*4를 선택한다. 정인이가 만든 행렬은 다음과
www.acmicpc.net
주어지는 문자열의 길이를 slen이라 할 때, slen의 약수를 slen보다 작은 수로 직접 나눠보는 것으로 구해 R과 C의 값을 구해낼 수 있다.
문제에서 주어지는 규칙을 거꾸로 따라가면서 배열을 직접 다시 재구성하고 원래의 문자열을 읽어내자.
아래와 같이 규칙을 수식으로 정리해 바로 답을 출력해도 좋다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int R, C;
string s; cin >> s;
int slen = s.length();
for (int i = 1; i * i <= slen; i++) {
if (slen % i == 0) R = i;
}
C = slen / R;
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) cout << s[c * R + r];
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 24313 // C++] 알고리즘 수업 - 점근적 표기 1 (1) | 2022.08.29 |
---|---|
[BOJ 5679 // C++] Hailstone Sequences (0) | 2022.08.28 |
[BOJ 2057 // C++] 팩토리얼 분해 (0) | 2022.08.28 |
[BOJ 24855 // C++] Natives (0) | 2022.08.28 |
[BOJ 14649 // C++] 문홍안 (0) | 2022.08.28 |