๋ฌธ์ ์ ๋ชฉ | ์ ๋ต๋ฅ | ๋์ด๋ |
์ธ๊ตฌ์ด๋ | 39% | Gold_4 |
๋ฌธ์ ์์ฝ
์ ์ฌ๊ฐํ ๋ ์ ํฌ๊ธฐ N, ์ต์ ์ธ๊ตฌ์ฐจ์ด L, ์ต๋ ์ธ๊ตฌ์ฐจ์ด R์ด ์ฒซ ๋ฒ์งธ ์ค์ ์ฃผ์ด์ง๋ค.
1~N+1์ค์๋ ๋๋ผ๋ณ ์ธ๊ตฌ์๊ฐ ์ฃผ์ด์ง๋ค.
๊ตญ๊ฒฝ์ ์ ๊ณต์ ํ๋ ๋ ๋๋ผ์ ์ธ๊ตฌ ์ฐจ์ด๊ฐ L์ด์ R์ดํ์ด๋ฉด ๋ ๋๋ผ๊ฐ ๊ณต์ ํ๋ ๊ตญ๊ฒฝ์ ์ ํ๋ฃจ๋์ ์ฐ๋ค.
๊ตญ๊ฒฝ์ ์ด ์ด๋ ค์๊ณ , ์ธ์ ํ ์นธ์ ์ด์ฉํด ์ด๋ํ ์ ์๋ค๋ฉด ํด๋น ๋๋ผ๋ค์ ์ฐํฉ์ด๋ผ๊ณ ํ๋ค.
์ฐํฉํ๋ ๋๋ผ์ ์ธ๊ตฌ์๋ sum(์ฐํฉ ์ธ๊ตฌ์)/(์ฐํฉํ๋ ๋๋ผ ์)์ด๋ค.
์ธ๊ตฌ ์ด๋์ด ๋ฐ์ํ์ง ๋ชปํ ๋๊น์ง ์ธ๊ตฌ ์ด๋์ ์ง์ํ๋ค.
์กฐ๊ฑด 1) 1 <=N <=50, 1 <=L <=R <=100, 0 <=์ธ๊ตฌ์ <=100
์ธ๊ตฌ์ด๋์ ์งํํ๋ ๋ ์ง๋ฅผ ๋ฐํํ์ฌ๋ผ
ํ์ด
Step1. ์ฐํฉ์ ์, ํ, ์ข, ์ฐ๋ก ์ด๋ฃจ์ด์ง์ผ๋ก bfs์ด์ฉ
- bfs(graph, visited, now_idx)
Step2. ์ข
๋ฃ์กฐ๊ฑด ์๊ฐ : break_flag ์ด์ฉ
- ๋ชจ๋ row, col์ ๋ํด bfs๊ฐ ์ผ์ด๋์ง ์์ผ๋ฉด ์ข ๋ฃํ ๋ค, ํด๋น ๋ ์ง ๋ฐํ
์ฝ๋
N, L, R = list(map(int, input().split()))
population_list = [[] for _ in range(N)]
for row_idx in range(N):
population_list[row_idx] = list(map(int, input().split()))
def bfs(graph, visited, now_row, now_col, L, R):
bfs_stack = [[now_row, now_col]]
answer = [[now_row, now_col]]
while len(bfs_stack) > 0:
x, y = bfs_stack.pop()
now_value = graph[x][y]
# ์
if x > 0:
if visited[x-1][y] == 0 and abs(now_value-graph[x-1][y]) >= L and abs(now_value-graph[x-1][y]) <= R:
visited[x-1][y] = 1
bfs_stack.append([x-1, y])
answer.append([x-1, y])
# ํ
if x < len(graph)-1:
if visited[x+1][y] == 0 and abs(now_value-graph[x+1][y]) >= L and abs(now_value-graph[x+1][y]) <= R:
visited[x+1][y] = 1
bfs_stack.append([x+1, y])
answer.append([x+1, y])
# ์ข
if y > 0:
if visited[x][y-1] == 0 and abs(now_value-graph[x][y-1]) >= L and abs(now_value-graph[x][y-1]) <= R:
visited[x][y-1] = 1
bfs_stack.append([x, y-1])
answer.append([x, y-1])
# ์ฐ
if y < len(graph)-1:
if visited[x][y+1] == 0 and abs(now_value-graph[x][y+1]) >= L and abs(now_value-graph[x][y+1]) <= R:
visited[x][y+1] = 1
bfs_stack.append([x, y+1])
answer.append([x, y+1])
if len(answer) > 1:
move_value = sum([population_list[row][col]
for row, col in answer])//len(answer)
for row, col in answer:
population_list[row][col] = move_value
return False
return True
day = 0
while day <= 2000:
break_flag = True
visited = [[0 for _ in range(N)] for _ in range(N)]
for row_idx in range(N):
for col_idx in range(N):
if visited[row_idx][col_idx] == 0:
visited[row_idx][col_idx] = 1
break_flag = break_flag & bfs(
population_list, visited, row_idx, col_idx, L, R)
if break_flag == False:
day += 1
else:
break
print(day)
'์๊ณ ๋ฆฌ์ฆ๐ฅ > ๋ฌธ์ ํ์ด (Python)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ๊ฐ์ฌ ๊ฒ์ (Lv.4) 2024/4/18 (0) | 2024.04.18 |
---|---|
[Baekjoon]18405. ๊ฒฝ์์ ์ ์ผ (Gold_5) 2024/4/9 (0) | 2024.04.09 |
[Programmers] ๊ดํธ ๋ณํ (Lv.2) 2024/4/5 (0) | 2024.04.06 |
[Programmers] ๋ฌธ์์ด ์์ถ (Lv.2) 2024/4/2 (0) | 2024.04.02 |
[Programmers] ๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์น (Lv.3) 2024/4/1 (1) | 2024.04.01 |