해결된 질문
작성
·
254
1
// 점프왕 젤리
import java.util.*;
import java.io.*;
class Jump_king_jelly {
static final int MAX = 3 + 100 + 10;
static int map[][];
static boolean visited[][];
static int N;
static int dirY[] = {1, 0};
static int dirX[] = {0, 1};
public static void dfs(int y, int x) {
visited[y][x] = true;
if(y == N && x == N)
return;
for(int i = 0; i < 2; i++) {
int newY = y + dirY[i] * map[y][x];
int newX = x + dirX[i] * map[y][x];
if(visited[newY][newX] == false) {
dfs(newY, newX);
}
}
}
public static void main(String[] args) throws IOException {
// 0. 입력 및 초기화
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
map = new int[MAX][MAX];
visited = new boolean[MAX][MAX];
// 1. map에 정보 반영
for(int i = 1; i <= N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j = 1; j <= N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
// 2. dfs 수행
dfs(1,1);
// 3. 출력
if(visited[N][N]) bw.write("HaruHaru");
else bw.write("Hing");
bw.close();
br.close();
}
}
답변 1
0
kevin님 안녕하세요 🙂
우선 결론부터 말씀드리면 y,x를 쓰거나 x,y를 쓰거나 코드에서 일관되게만 사용한다면 정답을 구하는 데 문제는 없습니다! 그래서 y,x를 쓰셔도 좋고 더 편하시다면 x,y를 쓰셔도 좋은데 통일만 시켜주시면 됩니다 ㅎㅎ
제가 y,x를 쓰게 된 이유는 주로 i, j를 인자로 넘겨주는데, 주로 i가 행의 번호, j가 열의 번호로 사용되기 때문입니다. 이걸 우리가 자주 사용했던 x,y 좌표 체계로 변환하면 y, x가 되기 때문에 y, x라고 썼습니다!
그리고 대부분 문제에서도 이렇게 y, x 기준으로 동작해서 사용한 경우가 많은데, 간혹 x,y 를 기준으로 입력 정보를 주는 경우도 있었던 것 같아요. 이때 맞춰서 x,y 로 바꿔도 되고, 그냥 y, x 라고 가정하고 사용해도 큰 문제는 없어서 이해하기 쉬우시도록 코드는 하나로 통일했습니다 ㅎㅎ
결론적으로 어떤 걸 써도 상관 없으니 원하시는 쪽으로 사용하시면 되고, 제 코드가 직관적이지 못하면 바꿔보시는 것도 코드를 이해하는 데 도움이 될 것 같아요. 혹시 여전히 헷갈리는 부분이 있으시거나 제 설명이 부족했으면 댓글 남겨주세요! 오늘도 공부 화이팅하세요!
답변해주셔서 정말 감사합니다!
직접 그림으로 그리면서 문제를 풀어보니, 이해가 잘되었습니다~😌