λͺ¨λ μ μ μ νμν΄μ κ°λ₯ν κ²½μ°κ° μμΌλ©΄ happyλ₯Ό λ°λ‘ μΆλ ₯νλ€. BFS λλ DFSλ₯Ό μ΄μ©νμ!
import sys
t = int(sys.stdin.readline())
coordinates = []
happy_flag = True
for _ in range(t):
n = int(sys.stdin.readline())
current = 20
for _ in range(n+2):
coordinates.append(tuple(map(int, sys.stdin.readline().split())))
for i in range(1, len(coordinates)):
diff = abs(coordinates[i][0] - coordinates[i-1][0]) + abs(coordinates[i][1] - coordinates[i-1][1])
drank_beer = diff // 50
if drank_beer >= 20 and diff % 50 != 0:
happy_flag = False
break
current -= drank_beer
if i != len(coordinates) -1 :
current += drank_beer
if happy_flag:
print("happy")
else:
print("sad")
λ°λ‘
1
2
0 0
1000 0
2000 1000
1000 1000
import sys
from collections import deque
def bfs():
queue = deque()
queue.append((home_x, home_y))
while queue:
# νΈμμ μ λ€λ¦¬μ§μκ³ , λ°λ‘ νμ€ν°λ²λ‘ κ° μ μλ€λ©΄
x, y = queue.popleft()
if abs((festival_x - x)) + abs((festival_y - y)) <= 1000:
print("happy")
return
# νΈμμ μ λ€λ¬μΌνλ€λ©΄ λͺ¨λ νΈμμ λ°©λ¬Έν ν
for i in range(n):
# κ·Έ νΈμμ μ λ°©λ¬Ένμ§μμλ€λ©΄
if not visited[i]:
new_x, new_y = convenience_stores[i]
if abs((new_x - x)) + abs((new_y - y)) <= 1000:
visited[i] = 1
queue.append((new_x, new_y))
print("sad")
return
t = int(sys.stdin.readline())
for _ in range(t):
n = int(sys.stdin.readline())
convenience_stores = []
# μμ μ§μ μ μ ν΄μ Έμμ
home_x, home_y = map(int, sys.stdin.readline().split())
for _ in range(n):
convenience_stores.append(tuple(map(int, sys.stdin.readline().split())))
festival_x, festival_y = map(int, sys.stdin.readline().split())
# λ°©λ¬Έν νΈμμ νμΈ
visited = [0 for _ in range(n+1)]
bfs()
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int t, n, homeX, homeY, festivalX, festivalY;
static List<int[]> convenienceStores;
static int[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
t = Integer.parseInt(br.readLine());
for (int i = 1; i <= t; i++) {
n = Integer.parseInt(br.readLine());
convenienceStores = new ArrayList<>();
st = new StringTokenizer(br.readLine());
homeX = Integer.parseInt(st.nextToken());
homeY = Integer.parseInt(st.nextToken());
for (int j = 0; j < n; j++) {
st = new StringTokenizer(br.readLine());
convenienceStores.add(new int[]{Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())});
}
st = new StringTokenizer(br.readLine());
festivalX = Integer.parseInt(st.nextToken());
festivalY = Integer.parseInt(st.nextToken());
visited = new int[n];
Arrays.fill(visited, 0);
bw.write(bfs() ? "happy\\n" : "sad\\n");
}
// bw flush, close ν΄μ€μΌν¨.
bw.flush();
bw.close();
}
static boolean bfs() {
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{homeX, homeY});
while (!q.isEmpty()) {
int[] cur = q.poll();
int x = cur[0], y = cur[1];
if (Math.abs(festivalX - x) + Math.abs(festivalY - y) <= 1000) {
return true;
}
for (int i=0; i<n ; i++){
if (visited[i] == 0) {
int newX = convenienceStores.get(i)[0], newY = convenienceStores.get(i)[1];
if (Math.abs(newX - x) + Math.abs(newY - y) <= 1000) {
visited[i] = 1;
q.add(new int[]{newX, newY});
}
}
}
}
return false;
}
}