Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Synchronization
- Dijkstra Algorithm
- 세마포어와 뮤텍스
- 세마포어와 뮤텍스의 차이
- 플로이드 와샬
- 다익스트라 알고리즘
- 삼성 청년 SW 아카데미
- 다익스트라
- 동기화
- Proxy Server
- 클라우드 서버
- 최단 경로
- 뮤텍스
- 싸피
- floyd-warshall
- SSAFY
- 뮤텍스란?
- 웹 호스팅
- 싸피 면접 후기
- 프록시
- 프록시서버
- 싸피 합격
- Proxy
- 세마포어란?
- 세마포어
- 플로이드 워셜
- 호스팅이란?
- 호스팅
- 서버 호스팅
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[백준][14499][Java] 주사위 굴리기 본문
www.acmicpc.net/problem/14499
문제풀이
해당 문제는 주사위의 이동만 신경 잘 쓴다면 쉽게 풀 수 있는 문제이다.
주사위의 바닥 변수를 따로 선언하였고, 2차원 배열로 주사위 면을 표현해서 방향에 따라 bottom과 배열의 위치가 바뀌도록 하였다.
코드
import java.io.*;
import java.util.*;
public class Main {
static int N, M, diceX, diceY, K, bottom;
static int[][] map;
static int[] dx = {0,0,-1,1};
static int[] dy = {1,-1,0,0};
static int[][] dice = {{0,0,0},{0,0,0},{0,0,0}};
public static void main(String[] args) throws NumberFormatException, 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());
diceX = Integer.parseInt(st.nextToken());
diceY = 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 dis = Integer.parseInt(st.nextToken())-1;
int x = diceX + dx[dis];
int y = diceY + dy[dis];
//범위 오버 무시
if( x< 0 || x>=N || y<0 || y>=M) continue;
diceX = x;
diceY = y;
changeDice(dis);
checkBottom();
System.out.println(dice[1][1]);
}
}
private static void checkBottom() {
if(map[diceX][diceY] == 0) map[diceX][diceY] = bottom;
else {
bottom = map[diceX][diceY];
map[diceX][diceY] =0;
}
}
private static void changeDice(int dis) {
int temp =0;
//방향에 따라 주사위 값 이동
switch(dis) {
case 0:
temp = bottom;
bottom = dice[1][2];
for(int i=2; i>0; i--) {
dice[1][i] = dice[1][i-1];
}
dice[1][0] = temp;
break;
case 1:
temp = bottom;
bottom = dice[1][0];
for(int i=0; i<2; i++) {
dice[1][i] = dice[1][i+1];
}
dice[1][2] = temp;
break;
case 2:
temp = bottom;
bottom = dice[0][1];
for(int i=0; i<2; i++) {
dice[i][1] = dice[i+1][1];
}
dice[2][1] = temp;
break;
case 3:
temp = bottom;
bottom = dice[2][1];
for(int i=2; i>0; i--) {
dice[i][1] = dice[i-1][1];
}
dice[0][1] = temp;
break;
}
}
}
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준][13458][Java] 시험 감독 (0) | 2021.01.12 |
---|---|
[백준][14888][Java] 연산자 끼워넣기 (0) | 2021.01.11 |
[백준][20055][Java] 컨베이어 벨트 위의 로봇 (0) | 2021.01.06 |
[백준][20056][Java] 마법사 상어와 파이어볼 (1) | 2021.01.05 |
[프로그래머스][Level2][Java] 피보나치 수 (0) | 2020.12.28 |
Comments