https://www.acmicpc.net/problem/15558
15558번: 점프 게임
첫째 줄에 N과 k가 주어진다. (1 ≤ N, k ≤ 100,000) 둘째 줄에는 왼쪽 줄의 정보가 주어진다. i번째 문자가 0인 경우에는 위험한 칸이고, 1인 경우에는 안전한 칸이다. 셋째 줄에는 오른쪽 줄의 정보
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] dr = { 0, 0, 1 };
int[] dc = { 1, -1, K };
char[][] map = new char[2][N];
boolean[][] visited = new boolean[2][N];
map[0] = br.readLine().toCharArray();
map[1] = br.readLine().toCharArray();
Queue<int[]> q = new LinkedList<>();
q.offer(new int[] { 0, 0, 0 });
visited[0][0] = true;
while (!q.isEmpty()) {
int[] now = q.poll();
if (now[1] < now[2]) continue;
for (int dir = 0; dir < 3; dir++) {
int nr = (now[0] + dr[dir]) % 2;
int nc = now[1] + dc[dir];
if (N <= nc) {
System.out.print(1);
return;
}
if (0 <= nc && nc < N && map[nr][nc] == '1' && !visited[nr][nc]) {
q.offer(new int[] { nr, nc, now[2] + 1 });
visited[nr][nc] = true;
}
}
}
System.out.print(0);
}
}
'OJ' 카테고리의 다른 글
[BOJ] 1789 수들의 합 (JAVA) (0) | 2023.07.20 |
---|---|
[BOJ] 2108 통계학 (JAVA) (0) | 2023.07.19 |
[BOJ] 26091 현대모비스 소프트웨어 아카데미 (JAVA) (0) | 2023.07.17 |
[BOJ] 9019 DSLR (JAVA) (0) | 2023.07.16 |
[BOJ] 3184 양 (JAVA) (0) | 2023.07.15 |