티스토리 뷰
반응형
#. Problem
* The copyright in this matter is in BOJ
#. Resolution Process
1. Read and understand problem
2. Redefine the problem + abstract
3. Create solution plan (select Algorithm, Data structure)
4. Prove the plan (check performance time and usage memory)
5. Carry out the plan
6. Look back on the plan and find a way to improve it
#. Solve
추억의(?) 2048 문제
각 방향별로의 동작을 구현하지 않고
단순하게 회전으로 방향을 right로 맞춰준 후 숫자들을 밀어주었다.
단, 마지막에 다시 원래 방향으로 돌려줘야한다는 것 !!
#. Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BOJ12208 { static int N, map[][]; static int dir; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; int T = Integer.parseInt(br.readLine()); for (int tc = 1; tc <= T; tc++) { st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); map = new int[N][N]; String d = st.nextToken(); // right, up, left, down; if (d.equals("right")) dir = 0; else if (d.equals("up")) dir = 1; else if (d.equals("left")) dir = 2; else dir = 3; for (int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine()); for (int j = 0; j < N; j++) { map[i][j] = Integer.parseInt(st.nextToken()); } } process(); System.out.println("Case #" + tc + ":"); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { System.out.print(map[i][j] + " "); } System.out.println(); } } } private static void process() { for (int i = 0; i < dir; i++) rotate90(); start(); if (dir != 0) { for (int i = 0; i < 4 - dir; i++) { rotate90(); } } } private static void start() { for (int i = 0; i < N; i++) { // 당기기 poll(i); // 합치기 for (int j = N - 1; j > 0; j--) { if (map[i][j] == map[i][j - 1]) { map[i][j] = map[i][j] * 2; map[i][j - 1] = 0; } } // 당기기 poll(i); } } private static void poll(int i) { for (int j = N - 1; j > 0; j--) { if(map[i][j] == 0) { int idx = j - 1; while(idx > 0 && map[i][idx] == 0) { idx--; } map[i][j] = map[i][idx]; map[i][idx] = 0; } } } private static void rotate90() { int[][] tmpMap = new int[N][N]; // 배열 복사 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { tmpMap[i][j] = map[i][j]; } } // 회전 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { map[j][N - 1 - i] = tmpMap[i][j]; } } } } | cs |
반응형
'PS > Problem_Solving' 카테고리의 다른 글
[BOJ] 5002. 도어맨(Greedy, 문자열).java (0) | 2020.11.01 |
---|---|
[BOJ] 3109.뱀(Queue,시뮬레이션) (0) | 2020.10.30 |
[SWEA] 1824. 혁진이의 프로그램 검증.java (0) | 2020.10.30 |
[BOJ] 14890.경사로(구현).java (0) | 2020.10.28 |
[BOJ] 6198.옥상 정원 구미기(stack).java (0) | 2020.10.28 |
댓글