๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 13265_์ƒ‰์น ํ•˜๊ธฐ

๋ฟŒ์•ผ._. 2023. 6. 13. 09:35

Gold V

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

< ์ƒ‰์น ํ•˜๊ธฐ >

 

๋ฌธ์ œ ํ’€์ด

 

bfs๋ฅผ ํ™œ์šฉํ•˜๋ฉด์„œ ์ „ ๋™๊ทธ๋ผ๋ฏธ์™€ ๋‹ค๋ฅธ ์ƒ‰์„ ์น ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ํŒ๋ณ„ํ•œ๋‹ค.

 

 

 

 my solution (Java)

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

public class _13265_ { // ์ƒ‰์น ํ•˜๊ธฐ
	static ArrayList<ArrayList<Integer>> arr;
	static int check[];
	static boolean flag;
	public static void main(String[] args) throws IOException {
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		int t=Integer.parseInt(bf.readLine());
		for(int i=0; i<t; i++) {
			st=new StringTokenizer(bf.readLine());
			
			int n=Integer.parseInt(st.nextToken()); // ๋™๊ทธ๋ผ๋ฏธ ๊ฐœ์ˆ˜
			int m=Integer.parseInt(st.nextToken()); // ์ง์„  ๊ฐœ์ˆ˜
			
			arr=new ArrayList<>();
			check=new int[n];
			flag=false;
			for(int j=0; j<n; j++) {
				arr.add(new ArrayList<>());
				check[j]=-1;
			}
			
			for(int j=0; j<m; j++) {
				st=new StringTokenizer(bf.readLine());
				int x=Integer.parseInt(st.nextToken())-1;
				int y=Integer.parseInt(st.nextToken())-1;
				arr.get(x).add(y);
				arr.get(y).add(x);
			}
			
			for(int j=0; j<n; j++) {
				if(check[j]==-1) {
					check[j]=0;
					bfs(j);
				}
			}	
			if(flag) System.out.println("impossible");
			else System.out.println("possible");
		}
	}
	private static void bfs(int j) {
		Queue<Integer>queue=new LinkedList<>();
		queue.add(j);
		
		while(!queue.isEmpty()) {
			int num=queue.poll();
			for(int i=0; i<arr.get(num).size(); i++) {
				if(check[arr.get(num).get(i)]==-1) {
					if(check[num]==0) {
						check[arr.get(num).get(i)]=1;
						queue.add(arr.get(num).get(i));
					}
					else if(check[num]==1) {
						check[arr.get(num).get(i)]=0;
						queue.add(arr.get(num).get(i));
					}
				}else if(check[arr.get(num).get(i)]==0) {
					if(check[num]!=1) {
						flag=true;
						return;
					}
				}else if(check[arr.get(num).get(i)]==1) {
					if(check[num]!=0) {
						flag=true;
						return;
					}
				}
			}
		}
	}
}

 

Main

- ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜(t) ์ž…๋ ฅ

- ๋™๊ทธ๋ผ๋ฏธ ๊ฐœ์ˆ˜(n), ์ง์„ ๋“ค์˜ ๊ฐœ์ˆ˜(m) ์ž…๋ ฅ

- arr : ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

  check : ๋™๊ทธ๋ผ๋ฏธ ์ƒ‰์ƒ

   flag : ์ƒ‰์น  ๊ฐ€๋Šฅ ์—ฌ๋ถ€

- ์ง์„ ๋“ค์˜ ๊ฐœ์ˆ˜(m) ๋งŒํผ ์ž…๋ ฅํ•˜์—ฌ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์ •๋ณด ์ €์žฅ

- ๋™๊ทธ๋ผ๋ฏธ ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์•„์ง ์ƒ‰์น ํ•˜์ง€ ์•Š์€ ๋™๊ทธ๋ผ๋ฏธ์ธ ๊ฒฝ์šฐ ์ƒ‰์น  ํ›„ bfs ํ•จ์ˆ˜ ํ˜ธ์ถœ

- flag ๊ฐ’์— ๋”ฐ๋ผ result ์ถœ๋ ฅ

 

bfs

- queue์— ๋™๊ทธ๋ผ๋ฏธ ์‹œ์ž‘ ๋ฒˆํ˜ธ ์ €์žฅ

- queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> ํ˜„์žฌ ๋™๊ทธ๋ผ๋ฏธ์™€ ์ธ์ ‘๋œ ๋™๊ทธ๋ผ๋ฏธ๋ฅผ ํƒ์ƒ‰ -> ์ธ์ ‘๋œ ๋™๊ทธ๋ผ๋ฏธ๊ฐ€ ์•„์ง ์ƒ‰์น ํ•˜์ง€ ์•Š์€ ๋™๊ทธ๋ผ๋ฏธ(๊ฐ’์ด -1)๋ผ๋ฉด ํ˜„์žฌ ๋™๊ทธ๋ผ๋ฏธ์™€ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ์ƒ‰์น  ํ›„ queue์— ์ €์žฅ / ์ธ์ ‘๋œ ๋™๊ทธ๋ผ๋ฏธ๊ฐ€ ์ด๋ฏธ ์ƒ‰์น ๋œ ๋™๊ทธ๋ผ๋ฏธ๋ผ๋ฉด ํ˜„์žฌ ๋™๊ทธ๋ผ๋ฏธ์™€ ๋‹ค๋ฅธ ์ƒ‰์ธ์ง€ ํŒ๋ณ„. ๊ฐ™์€ ์ƒ‰์ด๋ผ๋ฉด flag๋ฅผ true๋กœ ์ €์žฅ ํ›„ ์ข…๋ฃŒ

 


์ƒ๊ฐ๐Ÿค”