From d6c201d784b137ca89117153ebcf7b4aa41af6c1 Mon Sep 17 00:00:00 2001 From: bsyzch Date: Sun, 13 Jun 2021 00:20:40 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=90=EC=8B=9C=ED=94=BC=ED=95=98=EA=B8=B0?= =?UTF-8?q?=20o,=20=EC=9D=B8=EA=B5=AC=EC=9D=B4=EB=8F=99=20x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\224\274\355\225\230\352\270\260_352p.py" | 86 +++++++++++++++++++ ...\265\254 \354\235\264\353\217\231_355p.py" | 55 ++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 "cmkim/\354\235\264\352\262\203\354\235\264 \354\267\250\354\227\205\354\235\204 \354\234\204\355\225\234 \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270\353\213\244/\352\260\220\354\213\234 \355\224\274\355\225\230\352\270\260_352p.py" create mode 100644 "cmkim/\354\235\264\352\262\203\354\235\264 \354\267\250\354\227\205\354\235\204 \354\234\204\355\225\234 \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270\353\213\244/\354\235\270\352\265\254 \354\235\264\353\217\231_355p.py" diff --git "a/cmkim/\354\235\264\352\262\203\354\235\264 \354\267\250\354\227\205\354\235\204 \354\234\204\355\225\234 \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270\353\213\244/\352\260\220\354\213\234 \355\224\274\355\225\230\352\270\260_352p.py" "b/cmkim/\354\235\264\352\262\203\354\235\264 \354\267\250\354\227\205\354\235\204 \354\234\204\355\225\234 \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270\353\213\244/\352\260\220\354\213\234 \355\224\274\355\225\230\352\270\260_352p.py" new file mode 100644 index 0000000..687ad00 --- /dev/null +++ "b/cmkim/\354\235\264\352\262\203\354\235\264 \354\267\250\354\227\205\354\235\204 \354\234\204\355\225\234 \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270\353\213\244/\352\260\220\354\213\234 \355\224\274\355\225\230\352\270\260_352p.py" @@ -0,0 +1,86 @@ +n = int(input()) + +arr = [] +temp = [[0] * n for _ in range(n)] +teacher = [] +find = 0 +for i in range(n): + arr.append(list(map(str, input().split()))) + for j in range(n): + if arr[i][j] == 'T': + teacher.append((i, j)) + + +def dfs(count): + global find + if count == 3: # 장애물 3개가 다 설치된 경우 + for i in range(n): # 장애물 설치된 맵을 복사한 후에 + for j in range(n): + temp[i][j] = arr[i][j] + + if not check(): # 감시를 피하면 YES 출력후 종료 + print("YES") + quit() + + else: # 감시 못피하면 다른 경우도 검사해보기 + return + + for i in range(n): # 빈 공간에 대해서 장애물 3개까지 설치해보는 과정 + for j in range(n): + if arr[i][j] == 'X': + arr[i][j] = 'O' # 알파벳 O임 + count += 1 + dfs(count) + count -= 1 + arr[i][j] = 'X' + + +def check(): + result = 0 + for x, y in teacher: + for i in range(4): # 상하좌우 방향 검사 + if see(x, y, i): # 학생의 위치를 파악한 경우 + return True + + return False # 학생의 위치를 파악하지 못한 경우 + + +def see(x, y, dir): # 상하좌우 순으로 검사 + if dir == 0: + while 0 <= x < n: + if temp[x][y] == 'S': + return True + if temp[x][y] == 'O': + return False + else: + x -= 1 + if dir == 1: + while 0 <= x < n: + if temp[x][y] == 'S': + return True + if temp[x][y] == 'O': + return False + else: + x += 1 + if dir == 2: + while 0 <= y < n: + if temp[x][y] == 'S': + return True + if temp[x][y] == 'O': + return False + else: + y -= 1 + if dir == 3: + while 0 <= y < n: + if temp[x][y] == 'S': + return True + if temp[x][y] == 'O': + return False + else: + y += 1 + + return False + + +dfs(0)#dfs 함수안에서 한번만이라도 감시를 피했으면 YES 출력후 종료함 +print("NO") diff --git "a/cmkim/\354\235\264\352\262\203\354\235\264 \354\267\250\354\227\205\354\235\204 \354\234\204\355\225\234 \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270\353\213\244/\354\235\270\352\265\254 \354\235\264\353\217\231_355p.py" "b/cmkim/\354\235\264\352\262\203\354\235\264 \354\267\250\354\227\205\354\235\204 \354\234\204\355\225\234 \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270\353\213\244/\354\235\270\352\265\254 \354\235\264\353\217\231_355p.py" new file mode 100644 index 0000000..c1daa9a --- /dev/null +++ "b/cmkim/\354\235\264\352\262\203\354\235\264 \354\267\250\354\227\205\354\235\204 \354\234\204\355\225\234 \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270\353\213\244/\354\235\270\352\265\254 \354\235\264\353\217\231_355p.py" @@ -0,0 +1,55 @@ +from collections import deque + +n, l, r = map(int, input().split()) + +arr = [] +for _ in range(n): + arr.append(list(map(int, input().split()))) + + +#bfs, visited 사용해서 연합의 위치를 큐에 넣어주기 +#1. bfs로 일단 먼저 연합끼리 큐에 넣고 (이때 큐에 넣을수 있으면 True, 못 넣으면 False) +#2. 큐에 넣은 연합애들끼리 통일시킨다 +#3. 그 다음 또 bfs를 돌릴수 있는지 없는지 판단하기, bfs를 몇번 돌릴 수 있냐를 물어보는 문제 + +dx = [-1, 1, 0, 0] +dy = [0, 0, -1, 1] + +visited = [[0] * n for _ in range(n)] +union = [[-1] * n for _ in range(n)] +count = 0 + +def bfs(x, y, index): #x, y로 주어진 나라 위치 기준으로 연합국을 찾아 나가는 과정 + for i in range(4): + nx = x + dx[i] + ny = y + dy[i] + if 0 <= nx < n and 0 <= ny < n and not visited[nx][ny]: #bfs 조건 + if l <= abs(arr[x][y]-arr[nx][ny]) <= r: #두 나라 사이의 인구수차이가 조건을 만족할때 + union[nx][ny] = index + visited[nx][ny] = 1 + bfs(nx, ny, index) + return + + +for i in range(n): #모든 나라에 대해서 연합 index를 union배열에 초기화 시켜주기 + for j in range(n): + if not visited[i][j]: + #q = deque((i, j, count)) #bfs 돌릴 초기값 설정 + visited[i][j] = 1 + union[i][j] = count #bfs 시작위치의 연합 index 설정 + bfs(i, j, count) + + count += 1 + +for i in range(count): + + + + + + + + + + +