※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2713번 문제인 규현이의 사랑을 담은 문자메시지이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2713
2713번: 규현이의 사랑을 담은 문자메시지
첫째 줄에 테스트 케이스의 개수 T가 주어진다. (1 ≤ T ≤ 1,000) 각 테스트 케이스는 한 줄로 이루어져 있고, R, 공백, C, 공백, 규현이가 보내려고 하는 메시지로 이루어져 있다. (1 ≤ R,C ≤ 21) 메시
www.acmicpc.net
주어지는 문자열을 문제가 요구하는 형태로 바꿔 출력하는 구현문제이다.
입력으로 주어지는 문자열은 getline을 이용해 큰 문제없이 읽을 수 있다.
소용돌이 패턴의 구현은 visited 배열을 이용하면 "오른쪽으로 이동할 수 있을 때까지 이동", "아래로 이동할 수 있을 때까지 이동", "왼쪽으로 이동할 수 있을 때까지 이동", "위쪽으로 이동할 수 있을 때까지 이동"을 반복하는 것으로 어렵지 않게 구현할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int T, R, C;
string s, ss;
int ans[23][23];
int visited[23][23];
void solve() {
memset(ans, 0, sizeof(ans));
memset(visited, 0, sizeof(visited));
ss = "";
cin >> R >> C;
getline(cin, s); s = s.substr(1, s.length() - 1);
for (int r = 0; r <= R + 1; r++) visited[r][0] = visited[r][C + 1] = 1;
for (int c = 0; c <= C + 1; c++) visited[0][c] = visited[R + 1][c] = 1;
for (auto& l : s) {
int x = l - 'A' + 1;
string tmp = "";
for (int i = 0; i < 5; i++) {
if (x & 1) tmp += "1";
else tmp += "0";
x >>= 1;
}
while (!tmp.empty()) {
ss += tmp.back();
tmp.pop_back();
}
}
while (ss.length() < R * C) ss += "0";
int r = 1, c = 0, idx = 0;
while (idx < R * C) {
while (!visited[r][c + 1]) {
c++;
visited[r][c] = 1;
ans[r][c] = ss[idx++];
}
while (!visited[r + 1][c]) {
r++;
visited[r][c] = 1;
ans[r][c] = ss[idx++];
}
while (!visited[r][c - 1]) {
c--;
visited[r][c] = 1;
ans[r][c] = ss[idx++];
}
while (!visited[r - 1][c]) {
r--;
visited[r][c] = 1;
ans[r][c] = ss[idx++];
}
}
for (int rr = 1; rr <= R; rr++) {
for (int cc = 1; cc <= C; cc++) cout << (char)(ans[rr][cc]);
}
cout << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while (T--) solve();
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 6844 // C++] Keep on Truckin' (0) | 2023.11.17 |
---|---|
[BOJ 6842 // C++] Deal or No Deal Calculator (0) | 2023.11.16 |
[BOJ 2718 // C++] 타일 채우기 (0) | 2023.11.14 |
[BOJ 15311 // C++] 약 팔기 (1) | 2023.11.13 |
[BOJ 7286 // C++] Ancient Keyboard (1) | 2023.11.12 |