728x90
https://level.goorm.io/exam/195692/gamejam/quiz/1
728x90
내 생각
문제 설명이 조금 미흡한 것 같다.
<command> 방향으로 <count>만큼 한 번에 이동하고 점수는 1점 오른다고 생각해서 예시 2가 왜 player 6이 답이 나오는지 한참 고민했다.
<count>만큼 이동하는 도중 지나치는 모든 칸에 대해 방문 기록 체크를 해야 하고, <count>가 3이면 점수도 3점이 올라간다.
만약 <count>가 3이라 3칸을 이동해야 해서 1칸을 이동하고 다음 2번째 칸을 이동하려 하는데 이미 방문한 칸이라면 점수 1만 얻고 게임은 끝난다.
import java.io.*;
import java.util.*;
class Main {
static int N;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// N 입력
N = Integer.parseInt(br.readLine());
// 구름이 시작 좌표 입력
st = new StringTokenizer(br.readLine());
int[] goorm = new int[2];
goorm[0] = Integer.parseInt(st.nextToken()) - 1;
goorm[1] = Integer.parseInt(st.nextToken()) - 1;
// 플레이어 시작 좌표 입력
st = new StringTokenizer(br.readLine());
int[] player = new int[2];
player[0] = Integer.parseInt(st.nextToken()) - 1;
player[1] = Integer.parseInt(st.nextToken()) - 1;
// 보드 입력
int[][] count = new int[N][N];
String[][] command = new String[N][N];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < N; j++) {
String tmp = st.nextToken();
count[i][j] = Integer.parseInt(tmp.substring(0, tmp.length() - 1));
command[i][j] = tmp.substring(tmp.length() - 1, tmp.length());
}
}
// 구름이 점수 구하기
int score1 = 1;
boolean[][] visited = new boolean[N][N];
visited[goorm[0]][goorm[1]] = true;
while1: while(true) {
int cnt = count[goorm[0]][goorm[1]];
String cmd = command[goorm[0]][goorm[1]];
for(int i = 0; i < cnt; i++) { // cmd 방향으로 움직일 수 있을만큼 이동
move(goorm, cmd); // 한 칸 이동
if(visited[goorm[0]][goorm[1]]) break while1; // 이미 방문했던 곳이라면 while문 탈출
score1++; // 점수 올리기
visited[goorm[0]][goorm[1]] = true; // 방문체크
}
}
// 플레이어 점수 구하기
int score2 = 1;
visited = new boolean[N][N];
visited[player[0]][player[1]] = true;
while1: while(true) {
int cnt = count[player[0]][player[1]];
String cmd = command[player[0]][player[1]];
for(int i = 0; i < cnt; i++) { // cmd 방향으로 움직일 수 있을만큼 이동
move(player, cmd); // 한 칸 이동
if(visited[player[0]][player[1]]) break while1; // 이미 방문했던 곳이라면 while문 탈출
score2++; // 점수 올리기
visited[player[0]][player[1]] = true; // 방문체크
}
}
// 답 출력
if(score1 > score2) System.out.println("goorm " + score1);
else System.out.println("player " + score2);
}
private static void move(int[] p, String cmd) { // p를 cmd에 따라 한 칸씩 이동시키는 메소드
if(cmd.equals("U")) { // 위
p[0] = p[0] == 0 ? N - 1 : p[0] - 1;
} else if(cmd.equals("D")) { // 아래
p[0] = p[0] == N - 1 ? 0 : p[0] + 1;
} else if(cmd.equals("R")) { // 오른쪽
p[1] = p[1] == N - 1 ? 0 : p[1] + 1;
} else { // 왼쪽
p[1] = p[1] == 0 ? N - 1 : p[1] - 1;
}
}
}
728x90
'Problem Solving > goorm' 카테고리의 다른 글
[구름톤 챌린지 3주 차 학습 일기] 12일차 미션 문제 12. 발전기 (java) (0) | 2023.08.31 |
---|---|
[구름톤 챌린지 3주 차 학습 일기] 11일차 미션 문제 11. 통증 (2) (java) (0) | 2023.08.28 |
[구름톤 챌린지 2주 차 학습 일기] 9일차 미션 문제 9. 폭탄 구현하기 (2) (java) (0) | 2023.08.28 |
[구름톤 챌린지 2주 차 학습 일기] 8일차 미션 문제 8. 통증 (java) (0) | 2023.08.23 |
[구름톤 챌린지 2주 차 학습 일기] 7일차 미션 문제 7. 구름 찾기 깃발 (java) (0) | 2023.08.22 |