https://www.acmicpc.net/problem/9205
๊ทธ๋ํ ํ์ ๋ฌธ์ ์ด๋ค. ์ฒ์์๋ ์ ๋ ฅ์์ ์ฃผ์ด์ง ์ขํ๋ก ๊ฐ๋ฅํ ๋ฒ์๋ก ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด์ ํ์์ ๋๋ ค์ผ ํ๋ ์๊ฐํ์๋ค. ํ์ง๋ง ์ขํ ์์ฒด๋ฅผ ํ ์ ์ ์ผ๋ก ์๊ฐํ๊ณ ์ ์ ๊ฐ ํ์์ ํด์ฃผ๋ฉด ๋์๋ค.
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 |