삐까냥의 파도타기

14499번) 주사위 굴리기 본문

코딩/삼성 SW 역량 테스트 기출

14499번) 주사위 굴리기

금손형아 2018. 4. 8. 10:13

문제 출처 : https://www.acmicpc.net/problem/14499


엄청 쉬운 문제라 생각했는데, 계속 틀렸어요.


문제가 무엇이냐면, 입력을 받을때,

주사위의 좌표를 X, Y로 받는다고 써있지만,

실제로는 Y, X 순서로 받아옵니다.


여기에서만 10분 까먹은거 같아요.

주어지는 예제에서는 Y=X이기 때문에

정상 작동 하지만,

테스트 예제에서는 Y != X인 경우가 있어서

바로 틀렸다고 뜨네요.



 2018년 4월 8일 - 다듬지 않은 시험 코드 (소요시간 45분)


import java.util.Scanner;


public class Q14499 {


static Dice dice;

static int[][] map;

static int nowX, nowY;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int mapY = sc.nextInt();

int mapX = sc.nextInt();

map = new int[mapY][mapX];

nowY = sc.nextInt();

nowX = sc.nextInt();

int moveSize = sc.nextInt();

for (int i = 0; i < mapY; i++) {

for (int j = 0; j < mapX; j++) {

map[i][j] = sc.nextInt();

}

}

dice = new Dice(); 

for (int i = 0; i < moveSize; i++) {

int direction = sc.nextInt();

switch (direction) {

//동

case 1 :

if (nowX+1 < mapX) {

nowX += 1;

dice.diceRight();

setValue();

}

break;

//서

case 2 :

if (nowX-1 >= 0) {

nowX -= 1;

dice.diceLeft();

setValue();

}

break;

//북

case 3 :

if (nowY-1 >= 0) {

nowY -= 1;

dice.diceUp();

setValue();

}

break;

//남

case 4 :

if (nowY+1 < mapY) {

nowY += 1;

dice.diceDown();

setValue();

}

break;

default :

break;

}

}

}

static void setValue() {

int mapValue = map[nowY][nowX];

int bottomValue = dice.getBottom();

if (mapValue == 0) {

map[nowY][nowX] = bottomValue;

} else {

map[nowY][nowX] = 0;

dice.setBottom(mapValue);

}

dice.showTop();

}

}


class Dice {

private int

  up,

   left, top, right,

down,

bottom;

public Dice() {

}

public void diceUp() {

int temp = up;

up = top;

top = down;

down = bottom;

bottom = temp;

}

public void diceDown() {

int temp = bottom;

bottom = down;

down = top;

top = up;

up = temp;

}

public void diceLeft() {

int temp = top;

top = right;

right = bottom;

bottom = left;

left = temp;

}

public void diceRight() {

int temp = top;

top = left;

left = bottom;

bottom = right;

right = temp;

}

public void setBottom(int value) {

bottom = value;

}

public void showTop() {

System.out.println(top);

}

public int getBottom() {

return bottom;

}

}




클래스 안쓰고 구현했어요



 2018년 4월 12일 - 다듬지 않은 코드


import java.util.Scanner;


public class Q1499 {


static int ySize, xSize, size;

static int top, bottom, up, down, left, right;

static int[][] map;

static int nowY, nowX;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

ySize = sc.nextInt();

xSize = sc.nextInt();

nowY = sc.nextInt();

nowX = sc.nextInt();

size = sc.nextInt();

map = new int[ySize][xSize];

for (int i = 0; i < ySize; i++) {

for (int j = 0; j < xSize; j++) {

map[i][j] = sc.nextInt();

}

}

for (int i = 0; i < size; i++ ){

int direction = sc.nextInt();

moveDice(direction);

}

}

static void moveDice(int direction) {

switch(direction) {

case 1 :

if (nowX+1 < xSize) {

nowX += 1;

int temp = left;

left = bottom;

bottom = right;

right = top;

top = temp;

copyValue();

}

break;

case 2 :

if (0 <= nowX-1) {

nowX -= 1;

int temp = left;

left = top;

top = right;

right = bottom;

bottom = temp;

copyValue();

}

break;

case 3 :

if (0 <= nowY-1) {

nowY -= 1;

int temp = bottom;

bottom = up;

up = top;

top = down;

down = temp;

copyValue();

}

break;

case 4 :

if (nowY+1 < ySize) {

nowY += 1;

int temp = bottom;

bottom = down;

down = top;

top = up;

up = temp;

copyValue();

}

break;

}

}

static void copyValue() {

if (map[nowY][nowX] == 0) {

map[nowY][nowX] = bottom;

} else {

bottom = map[nowY][nowX];

map[nowY][nowX] = 0;

}

System.out.println(top);

}

}




'코딩 > 삼성 SW 역량 테스트 기출' 카테고리의 다른 글

13458번) 시험 감독  (0) 2018.04.08
14500번) 테트로미노  (0) 2018.04.08
14501번) 퇴사  (0) 2018.04.07
14891번) 톱니바퀴  (0) 2018.04.07
14888번) 연산자 끼워넣기  (0) 2018.04.06