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
- jquery 이벤트 처리
- 순열코드
- 순열 재귀
- 자바 재귀 조합
- 자바스크립트 이벤트중지
- jquery dom 계층 선택자
- java 내부 클래스
- 후위표기
- Java
- 자바
- inner class
- jquery 속성선택자
- parseInt()
- 서로소
- Interface
- java Collections.sort()
- 자바입출력
- 알고리즘
- 상속
- str to char array
- 재귀
- char to str
- java lambda
- 자바 순열 코드
- 조합 재귀
- 재귀함수
- jquery 필터선택자
- 자바 조합 재귀
- 알고리즘 그래프
- 자바스크립트 이벤트처리
Archives
- Today
- Total
유블로그
[백준] baekjoon 14499 주사위굴리기 Java 본문
baekjoon 14499 주사위굴리기
삼성 sw 역량 기출
소요시간 : 42분
문제 이해하는데만 20분 넘게 걸렸다... ^^
동쪽으로 이동할 땐 동쪽으로 주사위를 굴리고
서쪽으로 이동할 땐 서쪽으로 주사위를 굴려야 한다.
문제에서 주어진 주사위 단면을 배열로 두고 풀었다.
동쪽으로 이동하는 경우 주사위의 1행과 밑면인 [3][1] 을 오른쪽으로 이동시키고
서쪽은 왼쪽으로 이동시켜야 한다.
남쪽은 주사위의 1열을 밑으로 이동시키고
북쪽은 주사위의 1열을 위로 이동시켜야 한다.
코드가 굉장히.. ^^ 하드코딩느낌
switch문을 좀 for 문으로 가능하게 빼야할 것 같다.
그것은 지금부터 생각해보는걸로
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, M, x, y, K;
static int[][] map;
static int[][] dir = { {0,0},{0,1},{0,-1},{-1, 0},{1, 0} }; // [0]은 의미없는 숫자임
static int[][] dice = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
}; // 밑 면 인덱스 : (3, 1)
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());
int d;
for (int i = 0; i < K; i++) {
d = Integer.parseInt(st.nextToken());
x += dir[d][0];
y += dir[d][1];
if(x < N && y < M && x >= 0 && y >= 0) {
int tmp;
switch(d) {
case 1:
tmp = dice[3][1];
dice[3][1] = dice[1][2];
dice[1][2] = dice[1][1];
dice[1][1] = dice[1][0];
dice[1][0] = tmp;
break;
case 2:
tmp = dice[3][1];
dice[3][1] = dice[1][0];
dice[1][0] = dice[1][1];
dice[1][1] = dice[1][2];
dice[1][2] = tmp;
break;
case 3:
tmp = dice[0][1];
dice[0][1] = dice[1][1];
dice[1][1] = dice[2][1];
dice[2][1] = dice[3][1];
dice[3][1] = tmp;
break;
case 4:
tmp = dice[3][1];
dice[3][1] = dice[2][1];
dice[2][1] = dice[1][1];
dice[1][1] = dice[0][1];
dice[0][1] = tmp;
break;
}
if(map[x][y] == 0) {
map[x][y] = dice[3][1];
}
else {
dice[3][1] = map[x][y];
map[x][y] = 0;
}
System.out.println(dice[1][1]);
}
else {
x -= dir[d][0];
y -= dir[d][1];
}
}
} // main
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] 파일명 정렬 Java (0) | 2021.02.16 |
---|---|
[프로그래머스] 야근지수 Java (0) | 2021.02.07 |
[프로그래머스] 방금그곡 Java (0) | 2021.02.01 |
[프로그래머스] 가장긴팰린드롬 Java (0) | 2021.01.31 |
[프로그래머스] 캐시 Java (0) | 2021.01.29 |