※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 28285번 문제인 육각형 순회이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/28285
28285번: 육각형 순회
정후는 펜타곤에서 영감을 얻어 지었다는 유명 건축가의 육각형 형태의 건축물에 방문한 뒤 이색적인 아름다움에 매료되었다. 건축물은 $3N^2-3N+1$ 개의 정육각형 방으로 이루어져 있고, 이 방들
www.acmicpc.net
주어진 육각형을 순회하는 회로는 다양하게 존재한다. 이 중 규칙적으로 생성하기 쉬운 방법을 찾아 문제를 해결하자.
특히, 주어지는 시작점 대신 고정된 하나의 위치(글쓴이의 경우 마지막 행 첫 번째 칸)에서 출발하는 경로 중 문제의 조건을 만족하는 것을 하나 찾고 이를 따라 주어진 칸에서 출발해 한 바퀴를 도는 경로를 출력하면 문제를 간편하게 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <deque>;
using namespace std;
int N, R, C, r, c;
deque<char> dqL, dqR;
int initX, initY;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> R >> C;
r = N * 2 - 1, c = 1;
if (N < 4) {
if (N == 3) {
dqR.push_back('Q');
dqR.push_back('Q');
dqR.push_back('E');
dqR.push_back('E');
dqR.push_back('D');
dqR.push_back('Z');
dqR.push_back('Z');
dqR.push_back('C');
dqR.push_back('E');
dqR.push_back('C');
dqR.push_back('E');
dqR.push_back('Q');
dqR.push_back('E');
dqR.push_back('C');
dqR.push_back('C');
dqR.push_back('Z');
dqR.push_back('Z');
dqR.push_back('A');
dqR.push_back('A');
}
else {
dqR.push_back('Q');
dqR.push_back('E');
dqR.push_back('C');
dqR.push_back('E');
dqR.push_back('C');
dqR.push_back('Z');
dqR.push_back('A');
}
}
else {
dqL.push_front('A');
int n = N;
while (n > 3) {
for (int i = 1; i < n; i++) dqR.push_back('Q');
for (int i = 1; i < n; i++) dqR.push_back('E');
for (int i = 2; i < n; i++) dqR.push_back('D');
dqR.push_back('Z');
for (int i = 3; i < n; i++) dqR.push_back('A');
for (int i = 2; i < n; i++) dqR.push_back('Z');
for (int i = 2; i < n; i++) dqR.push_back('C');
dqR.push_back('E');
for (int i = 2; i < n; i++) dqL.push_front('A');
for (int i = 1; i < n; i++) dqL.push_front('Z');
for (int i = 1; i < n; i++) dqL.push_front('C');
dqL.push_front('E');
for (int i = 2; i < n; i++) dqL.push_front('Q');
for (int i = 2; i < n; i++) dqL.push_front('E');
for (int i = 3; i < n; i++) dqL.push_front('D');
dqL.push_front('Z');
n -= 2;
}
if (n == 3) {
dqR.push_back('Q');
dqR.push_back('Q');
dqR.push_back('E');
dqR.push_back('E');
dqR.push_back('D');
dqR.push_back('Z');
dqR.push_back('Z');
dqR.push_back('C');
dqR.push_back('E');
dqR.push_back('C');
dqR.push_back('E');
dqR.push_back('Q');
dqR.push_back('E');
dqR.push_back('C');
dqR.push_back('C');
dqR.push_back('Z');
dqR.push_back('Z');
dqR.push_back('A');
}
else {
dqR.push_back('Q');
dqR.push_back('E');
dqR.push_back('C');
dqR.push_back('E');
dqR.push_back('C');
dqR.push_back('Z');
}
while (!dqL.empty()) {
dqR.push_back(dqL.front());
dqL.pop_front();
}
}
while (r != R || c != C) {
char& cur = dqR.front();
if (cur == 'A') c--;
else if (cur == 'D') c++;
else if (cur == 'Q') {
if (r <= N) c--;
r--;
}
else if (cur == 'E') {
if (r > N) c++;
r--;
}
else if (cur == 'Z') {
if (r >= N) c--;
r++;
}
else {
if (r < N) c++;
r++;
}
dqR.push_back(cur);
dqR.pop_front();
}
while (!dqR.empty()) {
cout << dqR.front();
dqR.pop_front();
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 28283 // C++] 해킹 (1) | 2023.11.20 |
---|---|
[BOJ 28284 // C++] 스터디 카페 (1) | 2023.11.19 |
[BOJ 6844 // C++] Keep on Truckin' (0) | 2023.11.17 |
[BOJ 6842 // C++] Deal or No Deal Calculator (0) | 2023.11.16 |
[BOJ 2713 // C++] 규현이의 사랑을 담은 문자메시지 (2) | 2023.11.15 |