⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.
2,147,483,648 게임이란, 2048 게임과 같고, 숫자의 범위만 int의 마지막값입니다. 그래서 unsigned int로 범위를 정해놓고 문제를 해결했습니다. 물론 입력값으로 저 값이 나오진 않지만 혹시나 몰라서 타입을 unsigned로 정해놨습니다.
문제를 해결할때, U,L,D,R 로 4가지를 구현하는 것 또한 좋은 방법입니다. 하지만, 해당 문제를 해결하면서 4가지를 전부 구현하는 것 보다는 배열을 시계방향으로 돌려가면서 하나의 방식으로만 이동을 시킨다면? 좀 더 문제 해결에 문제가 없을 것 같았습니다. 구현시 어느 부분에서 문제가 발생했는지 4개를 살피는 것보다는 더 나으니까요. 해당 문제의 코드입니다.
#include<iostream>
#include<cstring>
#define MAX 8
using namespace std;
unsigned int board[MAX][MAX];
char order;
void init() {
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
cin >> board[i][j];
}
}
cin >> order;
}
void printBoard() {
//cout << "current board status!" << "\n";
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
cout << board[i][j] << " ";
}
cout << "\n";
}
cout << "\n";
}
void rotate(int number) {
unsigned int temp[MAX][MAX];
for(int i = 0; i < number; i++){
memset(temp,0,sizeof(temp));
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
temp[i][j] = board[8 - 1 - j][i];
}
}
memcpy(board, temp, sizeof(board));
}
}
void gravity() {
unsigned int temp[MAX][MAX];
memset(temp,0,sizeof(temp));
for(int i = 0; i < 8; i++){
int curPoint = 7;
for(int j = 7; j >= 0; j--){
if(!board[j][i]) continue;
else{
unsigned int number = board[j][i];
if(!temp[curPoint][i]){
temp[curPoint][i] = number;
} else if(temp[curPoint][i] == number){
temp[curPoint][i] *= 2;
curPoint--;
} else if(temp[curPoint][i] != number){
curPoint--;
temp[curPoint][i] = number;
}
}
}
}
memcpy(board,temp,sizeof(board));
}
void solve(char direction){
if(direction == 'U'){
rotate(2);
gravity();
rotate(2);
} else if(direction == 'D'){
gravity();
} else if(direction == 'R'){
rotate(1);
gravity();
rotate(3);
} else if(direction == 'L'){
rotate(3);
gravity();
rotate(1);
}
printBoard();
}
int main() {
init();
solve(order);
return 0;
}
'PS > BaekJoon' 카테고리의 다른 글
[C++/28256] 초콜릿 보관함 (0) | 2024.06.27 |
---|---|
[C++/2115] 갤러리 (0) | 2024.06.20 |
[C++/25565] 딸기와 토마토 (0) | 2024.06.19 |
[C++/5766] 할아버지는 유명해! (0) | 2024.06.17 |
[C++/1790] 수 이어 쓰기 2 (0) | 2024.06.16 |