-
백준 12100 번 2048(자바) - 삼성sw역량 기출코딩테스트 2025. 6. 4. 17:17
move함수에서 계속 x와 y를 갱신시켜주지 않아 무한 루프를 돌아 오류가 발생했다.
꼭 x = nx; y = ny; 를 작성해줘야 한다.
import java.util.Scanner; class Main { static int n; static int[] dx = {-1,1,0,0}; static int[] dy = {0,0,-1,1}; static int answer; public static void main(String args[]) { Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); int[][] map = new int[n][n]; for (int i=0; i<n; i++) { for (int j = 0; j < n; j++) { map[i][j] = scanner.nextInt(); } } dfs(map, 0); System.out.println(answer); } static void dfs(int[][] map, int cnt) { if (cnt >= 5) { for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { answer = Math.max(answer, map[i][j]); } } return; } for (int i=0; i<4; i++) { int[][] board = new int[n][n]; boolean[][] isMerged = new boolean[n][n]; for (int p=0; p<n; p++) { board[p] = map[p].clone(); } //왼, 위는 0,0부터 if (i==0 || i==2) { for (int p=0; p<n; p++) { for (int k=0; k<n; k++) { move(i,p,k,isMerged,board); } } dfs(board, cnt+1); } //오, 아래는 n-1,n-1부터 else { for (int p=n-1; p>=0; p--) { for (int k=n-1; k>=0; k--) { move(i,p,k,isMerged,board); } } dfs(board, cnt+1); } } } static void move(int i, int x, int y, boolean[][] isMerged, int[][] board) { while (true) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx<0 || ny<0 || nx>=n || ny>=n) break; if (board[nx][ny] == 0) { board[nx][ny] = board[x][y]; board[x][y] = 0; x = nx; y = ny; } else if (board[nx][ny] == board[x][y] && !isMerged[nx][ny]) { isMerged[nx][ny] = true; board[nx][ny] *= 2; board[x][y] = 0; break; } else break; } } }
'코딩테스트' 카테고리의 다른 글
백준 14500 테트로미노(자바) - 삼성 sw 역량 인증 (0) 2025.06.09 백준 15685번 드래곤 커브(자바) - 삼성 sw 역량인증 (1) 2025.06.05 백준 1197 MST - 크루스칼 알고리즘 (0) 2025.06.01 백준 13460번 구슬 탈출2 (0) 2025.05.29 서투른 암소(c++) - stack (0) 2024.02.25