๋ฌธ์
๋ฐฑ์ค ๊ทธ๋ฆผ https://www.acmicpc.net/problem/1926
์ฝ๋
from collections import deque
n, m = map(int, input().split()) # ์ธ๋ก, ๊ฐ๋ก
paper = [list(map(int, input().split())) for _ in range(n)]
visit = [[False for _ in range(m)] for _ in range(n)] # ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ฉ
maxi = 0
picture_count = 0
for i in range(n): # ์ธ๋ก์ขํ
for j in range(m): # ๊ฐ๋ก์ขํ
if paper[i][j] == 1 and visit[i][j] == False: # ๊ทธ๋ฆผ์ด๊ณ , ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
picture_count += 1
# bfs
q = deque()
q.append([i, j])
visit[i][j] = True
area = 1
while q:
ey, ex = q.popleft()
# 4๋ฐฉํฅ ํ์
for dy,dx in [0, 1], [0, -1], [1, 0], [-1, 0]: #์ฐ, ์ข, ํ, ์
ny = ey + dy # ๊ฐ๊ณณ์ y ์ขํ
nx = ex + dx # ๊ฐ๊ณณ์ x ์ขํ
if 0 <= ny < n and 0 <= nx < m: # ๊ฐ๊ณณ์ด ์ข
์ด ๋ฒ์ ์์ด๋ผ๋ฉด
if paper[ny][nx] == 1: # ๊ฐ๊ณณ์ด ๊ทธ๋ฆผ์ด๋ผ๋ฉด
if not visit[ny][nx]: # ๊ฐ๊ณณ์ ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
visit[ny][nx] = True
area += 1
q.append([ny,nx])
maxi = max(maxi, area)
print(picture_count)
print(maxi)
ํ์ด
n, m = map(int, input().split()) # ์ธ๋ก, ๊ฐ๋ก
paper = [list(map(int, input().split())) for _ in range(n)]
visit = [[False for _ in range(m)] for _ in range(n)] # ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ฉ
maxi = 0
picture_count = 0
์ ๋ ฅ์กฐ๊ฑด์ ๋ง์ถฐ์ n, m, paper ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
visit๋ bfs ์คํ์ ํด๋น ์ขํ๋ฅผ ๋ฐฉ๋ฌธํ๋์ง ์ํ๋์ง ํ๋ณํ๊ธฐ ์ํด ์ฐ์ด๋ ๋ฐฐ์ด์ด๋ค.
maxi๋ ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๊ฐ ๋ ์ถ๋ ฅ๊ฐ ๋ณ์๋ค.
picture์ ์ต์ข ์ ์ผ๋ก ๊ทธ๋ฆผ์ ๊ฐ์๊ฐ ๋ ์ถ๋ ฅ๊ฐ ๋ณ์๋ค.
for i in range(n): # ์ธ๋ก์ขํ
for j in range(m): # ๊ฐ๋ก์ขํ
if paper[i][j] == 1 and visit[i][j] == False: # ๊ทธ๋ฆผ์ด๊ณ , ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
picture_count += 1
์ข ์ด์ ๊ฐ ์ขํ๋ฅผ ๋ชจ๋ ํ์ํ๋ค.
ํด๋น ์ขํ๊ฐ ๊ทธ๋ฆผ๋ถ๋ถ์ด๊ณ , ๋ฐฉ๋ฌธํ์ ์ด ์๋ค๋ฉด, ๊ทธ๋ฆผ์ ๊ฐ์๋ฅผ += 1 ํ๊ณ , bfs๋ฅผ ์คํํด์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ๊ตฌํ๋ค.
# bfs
q = deque()
q.append([i, j])
visit[i][j] = True
area = 1
while q:
ey, ex = q.popleft()
# 4๋ฐฉํฅ ํ์
for dy,dx in [0, 1], [0, -1], [1, 0], [-1, 0]: #์ฐ, ์ข, ํ, ์
ny = ey + dy # ๊ฐ๊ณณ์ y ์ขํ
nx = ex + dx # ๊ฐ๊ณณ์ x ์ขํ
if 0 <= ny < n and 0 <= nx < m: # ๊ฐ๊ณณ์ด ์ข
์ด ๋ฒ์ ์์ด๋ผ๋ฉด
if paper[ny][nx] == 1: # ๊ฐ๊ณณ์ด ๊ทธ๋ฆผ์ด๋ผ๋ฉด
if not visit[ny][nx]: # ๊ฐ๊ณณ์ ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
visit[ny][nx] = True
area += 1
q.append([ny,nx])
maxi = max(maxi, area)
bfs๋ฅผ ์คํํ๊ธฐ์ ์ ์ด๊ธฐํ ์์ ์ ํ๋ค.
ํ๋ฅผ ์์ฑํ๊ณ , ํ์ฌ ์ขํ๋ฅผ ํ์ ๋ฃ๋๋ค.
ํ์ฌ์ขํ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๊ณ , ๊ทธ๋ฆผ์ ๋์ด๊ฐ ๋ ๋ณ์๋ฅผ 1๋ก ์ด๊ธฐํํ๋ค.
ํ์ ์์ธ ์ขํ๊ฐ ์์๋๊น์ง bfs๋ฅผ ๋ฐ๋ณตํ๋ค.
bfs์์ ํ์ฌ์ขํ๋ ํ์์ ํ๋์ฉ ๊บผ๋ด์ฌ๊ฒ์ด๋ค.
ํ์์ ๊บผ๋ธ ํ์ฌ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์์ผ๋ก ๊ฐ ์ขํ ์ํ์ข์ฐ๋ฅผ ํ์ํ๋ฉฐ
๋ค์์ผ๋ก ๊ฐ ์ขํ๊ฐ ์ข ์ ๋ฒ์ ์์ด๊ณ , ๊ทธ๋ฆผ์ด๊ณ , ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
๋ค์์ผ๋ก ๊ฐ ์ขํ๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๊ณ , ๋์ด๋ฅผ 1 ๋๋ฆฌ๊ณ , ํ์ ๋ค์์ผ๋ก ๊ฐ ์ขํ๋ฅผ ๋ฃ๋๋ค.
bfs๊ฐ ๋๋ฌ์ผ๋ฉด maxi์ ๊ทธ๋ฆผ๋์ด์ ์ต๋๊ฐ์ ์ ๋ฐ์ดํธํ๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด์ / ๋๋์
- bfs ๊ฐ๋ ์ ์๊ณ ์์ง๋ง, ์์ผ๋ก ์ง์ ๊ตฌํํ ๋๋ง๋ค ํ๋์ฉ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์๋๊ฒ ๊ฐ๋ค.
- ๋ง์ bfs๋ฌธ์ ๋ฅผ ํ๋ฉฐ ๊ตฌํ์ ์ต์ํด ์ง๋ ์ฐ์ต์ด ํ์ํ ๊ฒ๊ฐ๋ค.
๋ ๋์ ์๊ฒฌ์ด๋ ๊ถ๊ธํ์ ๊ฒ ์๋ค๋ฉด ํธํ๊ฒ ๋๊ธ ๋ฌ์์ฃผ์ธ์ :)
'๐ก ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์์ด๋ฒ๋ฆฐ ๊ดํธ (0) | 2024.06.20 |
---|---|
[๋ฐฑ์ค] ์ ์ฐพ๊ธฐ (0) | 2024.06.19 |
[๋ฐฑ์ค] ์ํธ ๋ง๋ค๊ธฐ (0) | 2024.06.17 |
[๋ฐฑ์ค] ๋ฆฌ๋ชจ์ปจ (0) | 2024.06.16 |
[๋ฐฑ์ค] ๊ฐ์ํ๋ ์ (0) | 2024.06.15 |
๋ฌธ์
๋ฐฑ์ค ๊ทธ๋ฆผ https://www.acmicpc.net/problem/1926
์ฝ๋
from collections import deque
n, m = map(int, input().split()) # ์ธ๋ก, ๊ฐ๋ก
paper = [list(map(int, input().split())) for _ in range(n)]
visit = [[False for _ in range(m)] for _ in range(n)] # ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ฉ
maxi = 0
picture_count = 0
for i in range(n): # ์ธ๋ก์ขํ
for j in range(m): # ๊ฐ๋ก์ขํ
if paper[i][j] == 1 and visit[i][j] == False: # ๊ทธ๋ฆผ์ด๊ณ , ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
picture_count += 1
# bfs
q = deque()
q.append([i, j])
visit[i][j] = True
area = 1
while q:
ey, ex = q.popleft()
# 4๋ฐฉํฅ ํ์
for dy,dx in [0, 1], [0, -1], [1, 0], [-1, 0]: #์ฐ, ์ข, ํ, ์
ny = ey + dy # ๊ฐ๊ณณ์ y ์ขํ
nx = ex + dx # ๊ฐ๊ณณ์ x ์ขํ
if 0 <= ny < n and 0 <= nx < m: # ๊ฐ๊ณณ์ด ์ข
์ด ๋ฒ์ ์์ด๋ผ๋ฉด
if paper[ny][nx] == 1: # ๊ฐ๊ณณ์ด ๊ทธ๋ฆผ์ด๋ผ๋ฉด
if not visit[ny][nx]: # ๊ฐ๊ณณ์ ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
visit[ny][nx] = True
area += 1
q.append([ny,nx])
maxi = max(maxi, area)
print(picture_count)
print(maxi)
ํ์ด
n, m = map(int, input().split()) # ์ธ๋ก, ๊ฐ๋ก
paper = [list(map(int, input().split())) for _ in range(n)]
visit = [[False for _ in range(m)] for _ in range(n)] # ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ฉ
maxi = 0
picture_count = 0
์ ๋ ฅ์กฐ๊ฑด์ ๋ง์ถฐ์ n, m, paper ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
visit๋ bfs ์คํ์ ํด๋น ์ขํ๋ฅผ ๋ฐฉ๋ฌธํ๋์ง ์ํ๋์ง ํ๋ณํ๊ธฐ ์ํด ์ฐ์ด๋ ๋ฐฐ์ด์ด๋ค.
maxi๋ ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๊ฐ ๋ ์ถ๋ ฅ๊ฐ ๋ณ์๋ค.
picture์ ์ต์ข ์ ์ผ๋ก ๊ทธ๋ฆผ์ ๊ฐ์๊ฐ ๋ ์ถ๋ ฅ๊ฐ ๋ณ์๋ค.
for i in range(n): # ์ธ๋ก์ขํ
for j in range(m): # ๊ฐ๋ก์ขํ
if paper[i][j] == 1 and visit[i][j] == False: # ๊ทธ๋ฆผ์ด๊ณ , ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
picture_count += 1
์ข ์ด์ ๊ฐ ์ขํ๋ฅผ ๋ชจ๋ ํ์ํ๋ค.
ํด๋น ์ขํ๊ฐ ๊ทธ๋ฆผ๋ถ๋ถ์ด๊ณ , ๋ฐฉ๋ฌธํ์ ์ด ์๋ค๋ฉด, ๊ทธ๋ฆผ์ ๊ฐ์๋ฅผ += 1 ํ๊ณ , bfs๋ฅผ ์คํํด์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ๊ตฌํ๋ค.
# bfs
q = deque()
q.append([i, j])
visit[i][j] = True
area = 1
while q:
ey, ex = q.popleft()
# 4๋ฐฉํฅ ํ์
for dy,dx in [0, 1], [0, -1], [1, 0], [-1, 0]: #์ฐ, ์ข, ํ, ์
ny = ey + dy # ๊ฐ๊ณณ์ y ์ขํ
nx = ex + dx # ๊ฐ๊ณณ์ x ์ขํ
if 0 <= ny < n and 0 <= nx < m: # ๊ฐ๊ณณ์ด ์ข
์ด ๋ฒ์ ์์ด๋ผ๋ฉด
if paper[ny][nx] == 1: # ๊ฐ๊ณณ์ด ๊ทธ๋ฆผ์ด๋ผ๋ฉด
if not visit[ny][nx]: # ๊ฐ๊ณณ์ ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
visit[ny][nx] = True
area += 1
q.append([ny,nx])
maxi = max(maxi, area)
bfs๋ฅผ ์คํํ๊ธฐ์ ์ ์ด๊ธฐํ ์์ ์ ํ๋ค.
ํ๋ฅผ ์์ฑํ๊ณ , ํ์ฌ ์ขํ๋ฅผ ํ์ ๋ฃ๋๋ค.
ํ์ฌ์ขํ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๊ณ , ๊ทธ๋ฆผ์ ๋์ด๊ฐ ๋ ๋ณ์๋ฅผ 1๋ก ์ด๊ธฐํํ๋ค.
ํ์ ์์ธ ์ขํ๊ฐ ์์๋๊น์ง bfs๋ฅผ ๋ฐ๋ณตํ๋ค.
bfs์์ ํ์ฌ์ขํ๋ ํ์์ ํ๋์ฉ ๊บผ๋ด์ฌ๊ฒ์ด๋ค.
ํ์์ ๊บผ๋ธ ํ์ฌ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์์ผ๋ก ๊ฐ ์ขํ ์ํ์ข์ฐ๋ฅผ ํ์ํ๋ฉฐ
๋ค์์ผ๋ก ๊ฐ ์ขํ๊ฐ ์ข ์ ๋ฒ์ ์์ด๊ณ , ๊ทธ๋ฆผ์ด๊ณ , ๋ฐฉ๋ฌธํ์ ์๋ค๋ฉด
๋ค์์ผ๋ก ๊ฐ ์ขํ๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๊ณ , ๋์ด๋ฅผ 1 ๋๋ฆฌ๊ณ , ํ์ ๋ค์์ผ๋ก ๊ฐ ์ขํ๋ฅผ ๋ฃ๋๋ค.
bfs๊ฐ ๋๋ฌ์ผ๋ฉด maxi์ ๊ทธ๋ฆผ๋์ด์ ์ต๋๊ฐ์ ์ ๋ฐ์ดํธํ๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด์ / ๋๋์
- bfs ๊ฐ๋ ์ ์๊ณ ์์ง๋ง, ์์ผ๋ก ์ง์ ๊ตฌํํ ๋๋ง๋ค ํ๋์ฉ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์๋๊ฒ ๊ฐ๋ค.
- ๋ง์ bfs๋ฌธ์ ๋ฅผ ํ๋ฉฐ ๊ตฌํ์ ์ต์ํด ์ง๋ ์ฐ์ต์ด ํ์ํ ๊ฒ๊ฐ๋ค.
๋ ๋์ ์๊ฒฌ์ด๋ ๊ถ๊ธํ์ ๊ฒ ์๋ค๋ฉด ํธํ๊ฒ ๋๊ธ ๋ฌ์์ฃผ์ธ์ :)
'๐ก ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์์ด๋ฒ๋ฆฐ ๊ดํธ (0) | 2024.06.20 |
---|---|
[๋ฐฑ์ค] ์ ์ฐพ๊ธฐ (0) | 2024.06.19 |
[๋ฐฑ์ค] ์ํธ ๋ง๋ค๊ธฐ (0) | 2024.06.17 |
[๋ฐฑ์ค] ๋ฆฌ๋ชจ์ปจ (0) | 2024.06.16 |
[๋ฐฑ์ค] ๊ฐ์ํ๋ ์ (0) | 2024.06.15 |