반응형
Notice
Hot Posts
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코딩테스트
- 등촌동속눈썹펌
- ai/bigdata
- 포스코
- 마곡속눈썹연장
- 백준
- 삼성 SW역량테스트 기출
- 투포인터
- 수학
- 카카오
- 등촌동속눈썹연장
- 삼성
- 프로그래머스
- 시뮬레이션
- 삼성SW역량테스트
- BOJ
- leetcode
- 알고리즘
- 딥러닝
- 운영체제
- 1차면접
- 직무면접
- 마곡속눈썹펌
- 리트코드
- OS
- 다시보기
- level2
- 정렬
- Java
- 추석트래픽
Archives
- Today
- Total
기록하는 습관을 들이자
[ 백준 14999 주사위 굴리기 ] 문제 풀이(Java) - 삼성 SW역량테스트 기출 본문
반응형
오늘은 백준 14999 주사위 굴리기 문제를 풀어보았습니다.
별도의 알고리즘이 필요하지 않은 시뮬레이션 문제입니다.
문제보기
https://www.acmicpc.net/problem/14499
나의 풀이
주사위를 어떻게 구현할지만 생각하면 간단히 풀리는 문제입니다. 주사위는 6개의 면을 가진 정육면체이므로 저는 size 6의 배열을 선언하여 저장했습니다. 그리고 이동 명령에 따라 각 면에 있는 수를 어떻게 배치할지만 생각해주면 됩니다.
다음과 같이 주사위를 정의한 다음 각각의 동, 서, 남, 북에 따라 어느 면에 있는 수가 어느 면으로 이동할 지를 생각해주었습니다.
그리고 각 면의 수를 이동해준 다음 문제에 따라,
"이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 된다."
이것을 구현해주면 됩니다.
코드
//시뮬레이션 문제
import java.io.*;
import java.util.*;
public class N_14499 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
String[] arr = br.readLine().split(" ");
int N = Integer.parseInt(arr[0]);
int M = Integer.parseInt(arr[1]);
int x = Integer.parseInt(arr[2]); // 주사위 시작 위치
int y = Integer.parseInt(arr[3]);
int K = Integer.parseInt(arr[4]); // 명령의 개수
int[][] A = new int[N][M];
int[] dice = new int[6]; // 주사위(0: 윗면, 1: 아랫면, 2: 앞면, 3: 뒷면, 4: 왼쪽 면, 5: 오른쪽 면)
for (int i = 0; i < N; i++) {
String[] arr1 = br.readLine().split(" ");
for (int j = 0; j < M; j++) {
A[i][j] = Integer.parseInt(arr1[j]);
}
}
String[] command = br.readLine().split(" ");
for (int i = 0; i < command.length; i++) {
int dir = Integer.parseInt(command[i]);
// 주사위 굴리기
if (dir == 1) { // 동쪽
if (y + 1 >= M)
continue;
y++;
int temp = dice[1];
dice[1] = dice[5];
dice[5] = dice[0];
dice[0] = dice[4];
dice[4] = temp;
} else if (dir == 2) { // 서쪽
if (y - 1 < 0)
continue;
y--;
int temp = dice[1];
dice[1] = dice[4];
dice[4] = dice[0];
dice[0] = dice[5];
dice[5] = temp;
} else if (dir == 3) { // 북쪽
if (x - 1 < 0)
continue;
x--;
int temp = dice[1];
dice[1] = dice[3];
dice[3] = dice[0];
dice[0] = dice[2];
dice[2] = temp;
} else if (dir == 4) { // 남쪽
if (x + 1 >= N)
continue;
x++;
int temp = dice[1];
dice[1] = dice[2];
dice[2] = dice[0];
dice[0] = dice[3];
dice[3] = temp;
}
// 수 업데이트
if (A[x][y] == 0) {
A[x][y] = dice[1];
} else {
dice[1] = A[x][y];
A[x][y] = 0;
}
System.out.println(dice[0]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
결과
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
[ 백준 15684 사다리조작 ] 문제 풀이(Java) - 삼성 SW역량테스트 기출 (0) | 2020.04.29 |
---|---|
[ 백준 14500 테트로미노 ] 문제 풀이(Java) - 삼성 SW역량테스트 기출 (0) | 2020.04.16 |
[ 백준 1057 토너먼트 ] 문제 풀이(Java) - 시뮬레이션 문제 (0) | 2020.04.16 |
[ 백준 13458 시험 감독 ] 문제 풀이(Java) - 삼성SW역량테스트 기출 (0) | 2020.04.08 |
[ 백준 3190 뱀 ] 문제 풀이(Java) - 삼성 SW역량테스트 기출 (0) | 2020.04.08 |
Comments