728x90
반응형
주사위 굴리기
풀이
- 문제 파악
- 필요한 기능
- 이동
- 이동시에는 지도 밖으로 나가는지 확인해야 하는 조건 필요
- 이동 시 주사위 배열의 위치를 변경시켜줘야 함
- 바닥면 복사
- 바닥이 0 일 경우 주사위의 바닥면을 바닥에 복사
- 바닥이 0 이 아닐경우 바닥의 수를 주사위 바닥면에 복사 후 바닥의 값은 0으로 변경
- 이동
- 변수 생성
- 지도 생성에 필요한 변수
- 현재 위치 변수
- 주사위 오더 횟수 변수
- 동서남북 이동시 필요한 x,y 이동 배열 변수
- 주사위 배열 변수
public static int n,m,x,y,k; public static int[][] map; //동,서,북,남 public static int[] dx = {0,0,-1,1}; public static int[] dy = {1, -1, 0, 0}; //윗,바,앞,뒤,왼,오 public static int[] dice = {0, 0, 0, 0, 0, 0};
- 코드 구현
package Simulation; import java.io.*; import java.util.*; public class SimulationP14499 { public static int n,m,x,y,k; public static int[][] map; //동,서,북,남 public static int[] dx = {0,0,-1,1}; public static int[] dy = {1, -1, 0, 0}; //윗,바,앞,뒤,왼,오 public static int[] dice = {0, 0, 0, 0, 0, 0}; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); n = Integer.parseInt(st.nextToken()); m = Integer.parseInt(st.nextToken()); x =Integer.parseInt(st.nextToken()); y= Integer.parseInt(st.nextToken()); k = Integer.parseInt(st.nextToken()); map = new int[n][m]; for (int i = 0; i < n; i++) { st = new StringTokenizer(br.readLine()); for (int j = 0; j < m; j++) { map[i][j] = Integer.parseInt(st.nextToken()); } } st = new StringTokenizer(br.readLine()); for (int i = 0; i < k; i++) { int move = Integer.parseInt(st.nextToken())-1; x += dx[move]; y += dy[move]; if (x < 0 || x >= n || y < 0 || y >= m) { x -=dx[move]; y -= dy[move]; continue; } switch (move) { case 0: move_right(); break; case 1: move_left(); break; case 2: move_up(); break; case 3: move_down(); break; } //바닥면 복사 if (map[x][y] == 0) { map[x][y] = dice[1]; }else{ dice[1] = map[x][y]; map[x][y] = 0; } System.out.println(dice[0]); } } private static void move_down() { // 윗 -> 앞 -> 바 -> 뒷 -> 윗 int temp = dice[0]; dice[0] = dice[3]; dice[3] = dice[1]; dice[1] = dice[2]; dice[2] = temp; } private static void move_up() { // 윗 -> 뒷 -> 바 -> 앞 -> 윗 int temp = dice[0]; dice[0] = dice[2]; dice[2] = dice[1]; dice[1] = dice[3]; dice[3] = temp; } private static void move_left() { // 윗 -> 왼 -> 바 -> 오 -> 윗 int temp = dice[0]; dice[0] = dice[5]; dice[5] = dice[1]; dice[1] = dice[4]; dice[4] = temp; } // //윗,바,앞,뒤,왼,오 // public static int[] dice = {0, 0, 0, 0, 0, 0}; public static void move_right() { int temp = dice[0]; dice[0] = dice[4]; dice[4] = dice[1]; dice[1] = dice[5]; dice[5] = temp; } }
728x90
반응형
'문제 풀이 > 백준 문제풀이' 카테고리의 다른 글
[BOJ14501 - Java] 퇴사문제 DP로 풀이하기 (0) | 2024.07.28 |
---|---|
[백준1157- Java] 구현 - 단어 공부 (0) | 2024.04.23 |
[백준11047 - Java] 동전 0 Greedy 알고리즘으로 풀 (0) | 2024.03.26 |
[백준12789-자바/우선순위큐] 도키도키 간식드리미 (0) | 2024.03.20 |
[백준 1427 - 자바/ 선택정렬] 소트인사이드 (0) | 2024.03.20 |