From e15d49fa7f35e30e686e6faeb0ce2d90022478d7 Mon Sep 17 00:00:00 2001 From: INSEA-99 Date: Mon, 17 Nov 2025 21:03:08 +0900 Subject: [PATCH 1/4] =?UTF-8?q?Solved:=2024480=20=EC=95=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=EC=A6=98=20=EC=88=98=EC=97=85=20-=20=EA=B9=8A?= =?UTF-8?q?=EC=9D=B4=20=EC=9A=B0=EC=84=A0=20=ED=83=90=EC=83=89=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354\204\240_\355\203\220\354\203\211_2.py" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "INSEA-99/week09/24480_\354\225\214\352\263\240\353\246\254\354\246\230_\354\210\230\354\227\205_-_\352\271\212\354\235\264_\354\232\260\354\204\240_\355\203\220\354\203\211_2.py" diff --git "a/INSEA-99/week09/24480_\354\225\214\352\263\240\353\246\254\354\246\230_\354\210\230\354\227\205_-_\352\271\212\354\235\264_\354\232\260\354\204\240_\355\203\220\354\203\211_2.py" "b/INSEA-99/week09/24480_\354\225\214\352\263\240\353\246\254\354\246\230_\354\210\230\354\227\205_-_\352\271\212\354\235\264_\354\232\260\354\204\240_\355\203\220\354\203\211_2.py" new file mode 100644 index 0000000..e968510 --- /dev/null +++ "b/INSEA-99/week09/24480_\354\225\214\352\263\240\353\246\254\354\246\230_\354\210\230\354\227\205_-_\352\271\212\354\235\264_\354\232\260\354\204\240_\355\203\220\354\203\211_2.py" @@ -0,0 +1,69 @@ +# pypy3 +# 재귀 +# 시간(ms) : 568 +# 공간(KB) : 346740 +# +# 스택 +# 시간(ms) : 320 +# 공간(KB) : 136564 +# +# 공유 : +# - 스택(반복문) DFS가 재귀 DFS보다 대부분 더 빠르다. 그리고 안정성도 높다. +# - 파이썬은 재귀에 최적화 되어 있지 않고, 재귀는 함수를 호출하는거라 호출할 때마다 오버헤드가 발생한다. + + +import sys +from collections import deque +sys.setrecursionlimit(10**5) +input = sys.stdin.readline + +# 재귀를 이용한 dfs +def dfs(node): + global idx + visited[node] = idx + idx += 1 + for neighbor in adj[node]: + if not visited[neighbor]: + dfs(neighbor) + +n, m, r = map(int, input().split()) +adj = [[] for _ in range(n+1)] +visited = [0] * (n+1) +idx = 1 +for _ in range(m): # 인접리스트 생성 + u, v = map(int, input().split()) + adj[u].append(v) + adj[v].append(u) + +for neighbors in adj: # 인접리스트 정렬 + neighbors.sort(reverse=True) + +dfs(r) +print(*visited[1:], sep='\n') + +# # 스택을 이용한 dfs +# def dfs2(start): +# idx = 1 +# queue = deque([start]) +# while queue: +# node = queue.popleft() +# if not visited[node]: +# visited[node] = idx +# idx += 1 +# for neighbor in adj[node]: +# if not visited[neighbor]: +# queue.appendleft(neighbor) + +# n, m, r = map(int, input().split()) +# adj = [[] for _ in range(n+1)] +# visited = [0] * (n+1) +# for _ in range(m): # 인접리스트 생성 +# u, v = map(int, input().split()) +# adj[u].append(v) +# adj[v].append(u) + +# for neighbors in adj: # 인접리스트 정렬 +# neighbors.sort() + +# dfs2(r) +# print(*visited[1:], sep='\n') \ No newline at end of file From 6b12025fed8c2064be2e100de58d70a49994bdb7 Mon Sep 17 00:00:00 2001 From: INSEA-99 Date: Mon, 17 Nov 2025 21:38:34 +0900 Subject: [PATCH 2/4] =?UTF-8?q?Solved:=202667=20=EB=8B=A8=EC=A7=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=EB=B6=99=EC=9D=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...70\353\266\231\354\235\264\352\270\260.py" | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 "INSEA-99/week09/2667_\353\213\250\354\247\200\353\262\210\355\230\270\353\266\231\354\235\264\352\270\260.py" diff --git "a/INSEA-99/week09/2667_\353\213\250\354\247\200\353\262\210\355\230\270\353\266\231\354\235\264\352\270\260.py" "b/INSEA-99/week09/2667_\353\213\250\354\247\200\353\262\210\355\230\270\353\266\231\354\235\264\352\270\260.py" new file mode 100644 index 0000000..d206ffb --- /dev/null +++ "b/INSEA-99/week09/2667_\353\213\250\354\247\200\353\262\210\355\230\270\353\266\231\354\235\264\352\270\260.py" @@ -0,0 +1,43 @@ +# pypy3 +# 시간(ms) : 108 +# 공간(KB) : 113496 + +import sys +from collections import deque +input = sys.stdin.readline +# 방향: ↑, ↓, ←, → +dr = [-1, 1, 0, 0] +dc = [0, 0, -1, 1] + + +def dfs(r, c): + global n + map[r][c] = 0 # 방문 처리 (1 -> 0으로 변경하여 재방문 방지) + cnt = 1 # 현재 위치의 집을 카운트 + + # 4방향 탐색 + for d in range(4): + nr = r + dr[d] # 다음 행 위치 + nc = c + dc[d] # 다음 열 위치 + + # 범위 내에 있고, 집이 있는 경우(map[nr][nc] == 1) + if 0 <= nr < n and 0 <= nc < n and map[nr][nc] == 1: + cnt += dfs(nr, nc) # 재귀적으로 DFS 수행하여 카운트 누적 + + return cnt + +n = int(input()) # 지도의 크기 N +map = [list(map(int, input().strip())) for _ in range(n)] # N×N 지도 (0: 집 없음, 1: 집 있음) + +anw = [] # 각 단지별 집의 개수를 저장할 리스트 + +# 전체 지도를 순회하며 단지 찾기 +for r in range(n): + for c in range(n): + # 집이 있고 아직 방문하지 않은 경우 + if map[r][c] == 1: + anw.append(dfs(r, c)) # BFS로 단지 크기 계산 후 저장 + +# 출력 +print(len(anw)) # 총 단지 수 +print(*sorted(anw), sep='\n') # 각 단지 내 집의 수를 오름차순으로 출력 \ No newline at end of file From cc326f37451feb244922e142fd20a25755ff8468 Mon Sep 17 00:00:00 2001 From: INSEA-99 Date: Mon, 17 Nov 2025 21:53:36 +0900 Subject: [PATCH 3/4] =?UTF-8?q?Solved:=2015649=20N=EA=B3=BC=20M=20(1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week09/15649_N\352\263\274_M_(1).py" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "INSEA-99/week09/15649_N\352\263\274_M_(1).py" diff --git "a/INSEA-99/week09/15649_N\352\263\274_M_(1).py" "b/INSEA-99/week09/15649_N\352\263\274_M_(1).py" new file mode 100644 index 0000000..083bb42 --- /dev/null +++ "b/INSEA-99/week09/15649_N\352\263\274_M_(1).py" @@ -0,0 +1,25 @@ +# pypy3 +# 시간(ms) : 160 +# 공간(KB) : 240752 + +import sys +input = sys.stdin.readline +sys.setrecursionlimit(10**5) + +def dfs(depth) : + global n, m + if depth == m : # m 길이라면 출력 + print(*anw) + else : # m 길이가 아니라면 탐색 + for num in range(1, n + 1) : + if visited[num] == 0 : # 아직 사용하지 않았다면 사용 + visited[num] = 1 # 방문처리 + anw[depth] = num # 정답에 추가 + dfs(depth + 1) # 탐색 지속 + + visited[num] = 0 # 탐색 후 미방문 처리 + +n, m = map(int, input().split()) +anw = [0] * m +visited = [0] * (n + 1) +dfs(0) From d580a047f03c91571250760ff979ceee10781b60 Mon Sep 17 00:00:00 2001 From: INSEA-99 Date: Mon, 17 Nov 2025 22:04:24 +0900 Subject: [PATCH 4/4] =?UTF-8?q?Solved:=2015652=20N=EA=B3=BC=20M(4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week09/15652_N\352\263\274_M_(4).py" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "INSEA-99/week09/15652_N\352\263\274_M_(4).py" diff --git "a/INSEA-99/week09/15652_N\352\263\274_M_(4).py" "b/INSEA-99/week09/15652_N\352\263\274_M_(4).py" new file mode 100644 index 0000000..3295212 --- /dev/null +++ "b/INSEA-99/week09/15652_N\352\263\274_M_(4).py" @@ -0,0 +1,20 @@ +# pypy3 +# 시간(ms) : 136 +# 공간(KB) : 238864 + +import sys +input = sys.stdin.readline +sys.setrecursionlimit(10**5) + +def dfs(depth, pre_num) : + global n, m + if depth == m : # m 길이라면 출력 + print(*anw) + else : # m 길이가 아니라면 탐색 + for num in range(pre_num, n + 1) : # 비내림차순을 위해 이전 숫자부터 탐색 + anw[depth] = num # 정답에 추가 + dfs(depth + 1, num) # 탐색 지속 + +n, m = map(int, input().split()) +anw = [0] * m +dfs(0, 1)