https://www.acmicpc.net/problem/9205
9205๋ฒ: ๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ
์ก๋์ ์ฌ๋ ์๊ทผ์ด์ ์น๊ตฌ๋ค์ ์ก๋์์ ์ด๋ฆฌ๋ ํํํฌํธ ๋ฝ ํ์คํฐ๋ฒ์ ๊ฐ๋ ค๊ณ ํ๋ค. ์ฌํด๋ ๋งฅ์ฃผ๋ฅผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ๋ก ํ๋ค. ์ถ๋ฐ์ ์๊ทผ์ด๋ค ์ง์์ ํ๊ณ , ๋งฅ์ฃผ ํ ๋ฐ์ค๋ฅผ ๋ค๊ณ ์ถ๋ฐํ๋ค.
www.acmicpc.net
๊ทธ๋ํ ํ์ ๋ฌธ์ ์ด๋ค. ์ฒ์์๋ ์ ๋ ฅ์์ ์ฃผ์ด์ง ์ขํ๋ก ๊ฐ๋ฅํ ๋ฒ์๋ก ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด์ ํ์์ ๋๋ ค์ผ ํ๋ ์๊ฐํ์๋ค. ํ์ง๋ง ์ขํ ์์ฒด๋ฅผ ํ ์ ์ ์ผ๋ก ์๊ฐํ๊ณ ์ ์  ๊ฐ ํ์์ ํด์ฃผ๋ฉด ๋์๋ค.
0. ์ ๋ ฅ๋ฐ์ ๋ ํธ์์ ์ ์ขํ๋ฅผ Dot์ด๋ผ๋ ๊ฐ์ฒด ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
1. ์๊ทผ์ด๋ค ์ง์ ์์์ผ๋ก BFS ํ์์ ํ๋ค.
2. ๋ฝํ์ ๋์ฐฉํ ์ ์๋์ง ๊ฒ์ฌ๋ฅผ ํ๋ค.(๋งจํํ ๊ฑฐ๋ฆฌ๊ฐ 1000์ดํ์ฌ์ผ ํ๋ค.) ๋์ฐฉํ ์ ์์ผ๋ฉด ๋ฐ๋ก TRUE๋ฅผ ๋ฆฌํดํ๋ค.
3. ๋ชจ๋ ํธ์์ ์ ๋ํด ํ์์ ํ๋ค.
4. ๋ฐฉ๋ฌธํ์ง ์์๊ณ , 20๋ณ ์์ ๊ฐ ์ ์์ผ๋ฉด(๋งจํํ ๊ฑฐ๋ฆฌ๊ฐ 1000์ดํ์ด๋ฉด) ํ์ ๋ฃ์ด์ฃผ๊ณ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํด์ค๋ค.
5. ํ๊ฐ ๋น๋๊น์ง ๋ฐ๋ณตํ๋ค.
6. ์ค๊ฐ์ ๋ฆฌํด๋์ง ์๊ณ ๋๋ฌ๋ค๋ฉด ๋ฝํ์ ๋์ฐฉ ๋ชปํ ๊ฒ์ด๋ค.
์ฝ๋
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 Main {
	static int n;
	static Dot[] stores;
	static boolean[] visited;
	
	static class Dot {
		int x, y;
		public Dot(int x, int y) {
			this.x = x;
			this.y = y;
		}
	}
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine()); //ํ
์คํธ ์ผ์ด์ค์ ๊ฐ์
		
		StringBuilder sb = new StringBuilder();
		for(int t = 0; t < T; t++) { 
			n = Integer.parseInt(br.readLine()); //ํธ์์ ์ ๊ฐ์
			
			//์๊ทผ์ด๋ค ์ง ์ขํ
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			int hx = Integer.parseInt(st.nextToken());
			int hy = Integer.parseInt(st.nextToken());
			
			stores = new Dot[n];
			
			//ํธ์์  ์ขํ
			for(int i = 0; i < n; i++) {
				st = new StringTokenizer(br.readLine(), " ");
				int cx = Integer.parseInt(st.nextToken());
				int cy = Integer.parseInt(st.nextToken());
				
				//๋ฐฐ์ด์ ๋ด๊ธฐ
				stores[i] = new Dot(cx, cy);
			}
			
			//๋ฝํ ์ขํ
			st = new StringTokenizer(br.readLine(), " ");
			int fx = Integer.parseInt(st.nextToken());
			int fy = Integer.parseInt(st.nextToken());
			//๊ตฌํ
			visited = new boolean[n];
			
			if(bfs(hx, hy, fx, fy)) { //ํ๋ณตํ๊ฒ ํ์คํฐ๋ฒ์ ๊ฐ ์ ์์
				sb.append("happy\n");
			}else {
				sb.append("sad\n");
			}
		}
		
		System.out.println(sb);
	}
	public static boolean bfs(int hx, int hy, int fx, int fy) {
		Queue<Dot> queue = new LinkedList<>();
		
		queue.add(new Dot(hx, hy)); //์์์ 
		
		while(!queue.isEmpty()) {
			Dot dot = queue.poll();
			
			int dist = getDistance(dot.x, dot.y, fx, fy);
			
			if(dist <= 1000) { //๋ฝํ๊น์ง ๋์ฐฉ ๊ฐ๋ฅ
				return true;
			}
			
			for(int i = 0; i < n; i++) { //๋ชจ๋  ํธ์์ ์ ๋ํด ํ์
				if(!visited[i]) { //๋ฐฉ๋ฌธํ์ง ์์๊ณ 
					int nx = stores[i].x;
					int ny = stores[i].y;
					
					dist = getDistance(dot.x, dot.y, nx, ny);
					
					if(dist <= 1000) { //20๋ณ ์์ ๊ฐ ์ ์์ผ๋ฉด
						queue.add(new Dot(nx, ny));
						visited[i] = true;
					}
				}
			}
		}
		return false;
	}
	public static int getDistance(int x1, int y1, int x2, int y2) {
		return Math.abs(x2 - x1) + Math.abs(y2 - y1);
	}
}
๊ฒฐ๊ณผ

'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฐฑ์ค 23743๋ฒ : ๋ฐฉํ์ถ (0) | 2023.07.26 | 
|---|---|
| ๋ฐฑ์ค 17069๋ฒ - ํ์ดํ ์ฎ๊ธฐ๊ธฐ 2 (0) | 2022.10.05 | 
| ๋ฐฑ์ค 1189๋ฒ - ์ปด๋ฐฑํ (0) | 2022.10.01 | 
| ๋ฐฑ์ค 18429๋ฒ - ๊ทผ์์ค (0) | 2022.08.28 | 
| ๋ฐฑ์ค 2596๋ฒ - ๋น๋ฐํธ์ง (0) | 2022.08.28 | 
