๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 15558_์ ํ”„ ๊ฒŒ์ž„

๋ฟŒ์•ผ._. 2023. 3. 9. 22:47

Silver I

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/15558)

< ์ ํ”„ ๊ฒŒ์ž„ >

 

๋ฌธ์ œ ํ’€์ด

 

bfs๋ฅผ ํ™œ์šฉํ•˜๋ฉฐ ์กฐ๊ฑด์„ ์ž˜ ์„ค์ •ํ•ด ์คŒ์œผ๋กœ์จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 - my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class _15558_ { // ์ ํ”„ ๊ฒŒ์ž„
	static int arr[][], n, k;
	static boolean visited[][], flag;
	public static void main(String[] args) throws IOException {
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer(bf.readLine());
		
		n=Integer.parseInt(st.nextToken());
		k=Integer.parseInt(st.nextToken());
		
		arr=new int[2][n];
		visited=new boolean[2][n];
		flag=false;
		
		String str=bf.readLine();
		String str2=bf.readLine();
		for(int i=0; i<n; i++) {
			arr[0][i]=str.charAt(i)-'0';
			if(arr[0][i]==0) visited[0][i]=true;
			arr[1][i]=str2.charAt(i)-'0';
			if(arr[1][i]==0) visited[1][i]=true;
		}
		search(0,0, 0);
		
		if(flag) System.out.println(1);
		else System.out.println(0);
	}

	private static void search(int x , int y, int i) {
		Queue<int[]>queue=new LinkedList<>();
		queue.add(new int [] {x,y,i});
		
		visited[0][0]=true;
		
		while(!queue.isEmpty()) {
			int[] temp=queue.poll();
			if(temp[1]+1 > n || temp[1]+k >= n) { // ์ข…๋ฃŒ ์กฐ๊ฑด
				flag=true;
				break;
			}
			if(!visited[temp[0]][temp[1]+1]) { // ํ•œ ์นธ ์•ž ์ด๋™
				visited[temp[0]][temp[1]+1]=true;
				queue.add(new int[] {temp[0], temp[1]+1, temp[2]+1});
			}
			if(temp[1]-1>=0 && !visited[temp[0]][temp[1]-1] && temp[1]-1>temp[2]) { // ํ•œ ์นธ ๋’ค๋กœ ์ด๋™
				visited[temp[0]][temp[1]-1]=true;
				queue.add(new int[] {temp[0], temp[1]-1, temp[2]+1});
			}
			// ๋ฐ˜๋Œ€ํŽธ ์ค„๋กœ ์ ํ”„
			if(temp[0]==0) {
				if(!visited[1][temp[1]+k]) {
					visited[1][temp[1]+k]=true;
					queue.add(new int[] {1,temp[1]+k, temp[2]+1});
				}
			}else if(temp[0]==1) {
				if(!visited[0][temp[1]+k]) {
					visited[0][temp[1]+k]=true;
					queue.add(new int[] {0, temp[1]+k, temp[2]+1});
				}
			}
		}
	}
}

 

Main

- N๊ณผ K ์ž…๋ ฅ

- ์™ผ์ชฝ ์ค„๊ณผ ์˜ค๋ฅธ์ชฝ ์ค„์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด์„œ ์œ„ํ—˜ํ•œ ์นธ์ธ 0์ด๋ฉด ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ true๋กœ ์„ค์ •ํ•ด ์ค€๋‹ค.

- search ํ•จ์ˆ˜ ํ˜ธ์ถœ

- ๊ฒŒ์ž„์„ ํด๋ฆฌ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉด 1์„ ์ถœ๋ ฅ, ํด๋ฆฌ์–ดํ•  ์ˆ˜ ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅ

 

Search

- queue์— [x์ขŒํ‘œ, y์ขŒํ‘œ, ์‹œ๊ฐ„]์„ ๋„ฃ์–ด์ค€๋‹ค.

- queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์กฐ๊ฑด์„ ์„ค์ •ํ•ด ์ค€๋‹ค.

  1) n๋ฒˆ ์นธ๋ณด๋‹ค ๋” ํฐ ์นธ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ flag๋ฅผ true๋กœ ์„ค์ •ํ•œ ํ›„ ์ข…๋ฃŒํ•ด ์ค€๋‹ค. 

  2) ํ•œ ์นธ ์•ž์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ฉด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด๋ฏ€๋กœ ์ด๋™ ํ›„ queue์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

  3) ํ•œ ์นธ ๋’ค๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์ง€๋„์— ์กด์žฌํ•˜๋Š” ์นธ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ณ , ์•„์ง ์—†์–ด์ง€์ง€ ์•Š์€ ์นธ์ด๋ฉด ์ด๋™ ํ›„ queue์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

  4) ๋ฐ˜๋Œ€ํŽธ ์ค„๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ฉด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด๋ฏ€๋กœ ์ด๋™ ํ›„ queue์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.


์ƒ๊ฐ๐Ÿค”