์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- opencv
- ๋์ํ๋ณธ
- ๋ฐ์ดํฐ๋ถ๊ท ํ
- ์ธ๋์ํ๋ง
- ๋ ๋ฆฝํ๋ณธ
- Python
- t-test
- ๋น ๋ฐ์ดํฐ
- ํ ์คํธ๋ถ์
- PCA
- ๋ฐ์ดํฐ๋ถ์
- Lambda
- ADsP
- ์๋ํด๋ผ์ฐ๋
- ํ์ด์ฌ
- pandas
- numpy
- LDA
- datascience
- ์ค๋ฒ์ํ๋ง
- ADP
- ๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ
- iloc
- dataframe
- ์ฃผ์ฑ๋ถ๋ถ์
- ๋ฐ์ดํฐ๋ถ์์ ๋ฌธ๊ฐ
- ๊ตฐ์งํ
- DBSCAN
- ํฌ๋กค๋ง
- ๋ฐ์ดํฐ๋ถ์์ค์ ๋ฌธ๊ฐ
Data Science LAB
[Python] BOJ 10026.โ ์ ๋ก์์ฝ ๋ณธ๋ฌธ
https://www.acmicpc.net/problem/10026
1. ๋ฌธ์ ์ค๋ช
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค.
ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก), B(ํ๋) ์ค ํ๋๋ฅผ ์์น ํ ๊ทธ๋ฆผ์ด ์๋ค. ๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ ์๋๋ฐ, ๊ตฌ์ญ์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋, ๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ์ ๋ ๊ธ์๋ ๊ฐ์ ๊ตฌ์ญ์ ์ํ๋ค. (์์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์์์ด๋ผ ํ๋ค)
์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ ์ด 4๊ฐ์ด๋ค. (๋นจ๊ฐ 2, ํ๋ 1, ์ด๋ก 1) ํ์ง๋ง, ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ตฌ์ญ์ 3๊ฐ ๋ณผ ์ ์๋ค. (๋นจ๊ฐ-์ด๋ก 2, ํ๋ 1)
๊ทธ๋ฆผ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100)
๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ๊ทธ๋ฆผ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ๊ฐ์์ ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
2. ๋ฌธ์ ํ์ด
import sys
# ์ฌ๊ท ์ฌ์ฉ ๋ฌธ์ ์์ ํ์๋ก ์ค์ ํด์ผํจ
sys.setrecursionlimit(1000000)
# ์
๋ ฅ
N = int(input())
array = []
for _ in range(N):
array.append(list(input().rstrip()))
visited = [[False] * N for _ in range(N)]
dx = [1,-1,0,0]
dy = [0,0,1,-1]
# dfs ํจ์ ์ฌ์ฉ
def dfs(x,y):
visited[x][y] = True
color = array[x][y]
for i in range(4):
new_x, new_y = x+dx[i], y+dy[i]
if (0<= new_x < N) and (0 <= new_y < N):
if visited[new_x][new_y] == False and array[new_x][new_y] == color:
dfs(new_x, new_y)
cnt1, cnt2 = 0,0
# ์๋งน์ด ์๋ ๊ฒฝ์ฐ
for x in range(N):
for y in range(N):
if visited[x][y] == False:
dfs(x,y)
cnt1 += 1
# ์๋งน์ธ ๊ฒฝ์ฐ - visited ์ด๊ธฐํ
visited = [[False] * N for _ in range(N)]
# G-> R๋ก ๋ฐ๊ฟ์ค
for i in range(N):
for j in range(N):
if array[i][j] == 'G':
array[i][j] = 'R'
for x in range(N):
for y in range(N):
if visited[x][y] == False:
dfs(x,y)
cnt2 += 1
print(cnt1, cnt2)
dfs ํจ์๋ฅผ ์ ์ธํ๊ณ ์๋งน์ธ ๊ฒฝ์ฐ์ ์๋งน์ด ์๋ ๊ฒฝ์ฐ๋ก ๋ถํ ํ์ฌ ๋ฌธ์ ํด๊ฒฐ