Compy's Blog
362 words
2 minutes
[BOJ] 2048(Easy)
2025-02-13

2048(Easy)

TimeLimitMemoryLimitConditionTAG
1s256MB(1≤ N ≤ 20)Implementation

문제는 굉장히 재미있게 풀었습니다. 뭐 깊이 생각할게 없었던 것이 좀 아쉬웠지만, 그래도 게임을 구현하는 느낌으로 재미있게 풀었던 것 같습니다.

저는 단순히 보드를 회전시키면서 한 방향으로 밀어버리기를 선택해서 풀었습니다.

뭐 구현은 간단하기 때문에 딱히 설명은 필요없을 것 같네요.

정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;

vector<vector<int>> rotate(vector<vector<int>>& board){
    
    vector<vector<int>> current(n, vector<int>(n));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            current[j][n-1-i] = board[i][j];
        }
    }
    return current;
}

vector<vector<int>> play(vector<vector<int>>& board){
    vector<vector<int>> current(n, vector<int>(n, 0));

    
    // 일단 다 당겨보자 한번에 해봐? 근데 위로 올리는거임

    for(int i = 0; i < n; i++){ // x
        int currentPos = 0; // current에 대한 현재 위치값.
        current[0][i] = board[0][i];
        for(int j = 1; j < n; j++){ // y
            int currentCost = current[currentPos][i];
            if(board[j][i] != 0){
                if(currentCost == 0) current[currentPos][i] = board[j][i];
                else{
                    if(currentCost == board[j][i]) current[currentPos][i]*=2;
                    else current[currentPos+1][i] = board[j][i];
                    currentPos++;
                }
            }
        }
    }

    return current;
}

int solution(vector<vector<int>>& board, int depth){
    int result = 0;
    for(int i = 0; i < n*n; i++) result = max(result, board[i/n][i%n]);
    if(depth > 5) return result;
    
    
    vector<vector<int>> origin = board;
    
    for(int i = 0; i < 4; i++){
        board= play(origin);
        
        if(board != origin)
            result = max(result, solution(board, depth+1));
        
        origin = rotate(origin);
    }
    return result;
}


int main() {
    cin >> n;
    
    vector<vector<int>> board(n, vector<int>(n));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) cin >> board[i][j];
    }
    
    cout << solution(board, 1);

    return 0;
}
[BOJ] 2048(Easy)
https://compy07.github.io/Blog/posts/boj/12100/
Author
뒹굴뒹굴 이정훈 공부방
Published at
2025-02-13