반응형

https://www.acmicpc.net/problem/15558

 

15558번: 점프 게임

첫째 줄에 N과 k가 주어진다. (1 ≤ N, k ≤ 100,000) 둘째 줄에는 왼쪽 줄의 정보가 주어진다. i번째 문자가 0인 경우에는 위험한 칸이고, 1인 경우에는 안전한 칸이다. 셋째 줄에는 오른쪽 줄의 정보

www.acmicpc.net

 

몇 초가 지난 시점에 각 지점을 방문했는지 기록해주고, 그 때 이미 사라진 칸이라면 그냥 넘어가주었습니다.

그러다가 n번째 칸을 뛰어넘을 수 있게 되면 "1"을 출력해주었습니다.

#include <iostream>
#include <queue>
using namespace std;
int n, k, v[2][100000] = { 1 };
char a[2][100001];
int main() {
	scanf("%d %d %s %s", &n, &k, &a[0], &a[1]);
	queue<pair<int, int>> q; // <위치, 방향 왼0 오1>
	q.push({ 0, 0 });
	while (!q.empty()) {
		int pos = q.front().first;
		int dir = q.front().second;
		q.pop();
		if (v[dir][pos] > pos + 1) continue;
		if (pos + k >= n) {
			printf("1");
			return 0;
		}
		if (a[dir][pos + 1] == '1' && !v[dir][pos + 1])
			v[dir][pos + 1] = v[dir][pos] + 1, q.push({ pos + 1, dir });
		if (pos > 0 && a[dir][pos-1] == '1' && !v[dir][pos-1])
			v[dir][pos - 1] = v[dir][pos] + 1, q.push({ pos - 1,dir });
		if (a[!dir][pos+k] == '1' && !v[!dir][pos + k])
			v[!dir][pos + k] = v[dir][pos] + 1, q.push({ pos + k, !dir });
	}
	printf("0");
}
반응형

'Algorithm' 카테고리의 다른 글

백준 4991 : 로봇 청소기  (0) 2021.11.12
백준 6087 : 레이저 통신  (0) 2021.11.12
C언어 멱집합 구하기 : 반복문(iteration)과 재귀(recursion)  (0) 2021.11.12
백준 12851 : 숨바꼭질 2  (0) 2021.11.12
백준 9019 : DSLR  (0) 2021.11.12

+ Recent posts