삐까냥의 파도타기
14499번) 주사위 굴리기 본문
문제 출처 : 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 |