J1Yun
ZU-TECHLOG
J1Yun
전체 방문자
였늘
μ–΄μ œ
  • πŸ“‘ Category (135)
    • Algorithm (61)
      • πŸ“š Concept (6)
      • πŸ“˜ Baekjoon Judge (53)
      • πŸ“— Programmers (2)
    • Computer Science (42)
      • πŸ”’ Operating System (14)
      • πŸ“‘ Network (15)
      • πŸ’Ύ Database (8)
      • 🧩 Design Pattern (4)
      • πŸ”‘ Security (1)
    • Activities (12)
      • 🦁 λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ 9κΈ° (6)
      • πŸ’» SWλ§ˆμ—μŠ€νŠΈλ‘œ 13κΈ° (6)
    • Infra (1)
      • ☁️ AWS (1)
    • Languages (1)
      • πŸ’™ Python (1)
    • Backend (7)
      • πŸ”΅ Django (4)
      • 🟒 Node.js (3)
    • Ect. (8)
      • πŸ’¬ Talk (0)
      • πŸ—‚οΈ 개발직ꡰ μ·¨μ—… μ€€λΉ„μžλ£Œ (8)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

250x250
hELLO Β· Designed By μ •μƒμš°.
J1Yun

ZU-TECHLOG

[BOJ] λ°±μ€€ 16234번 인ꡬ 이동 - 파이썬(Python)
Algorithm/πŸ“˜ Baekjoon Judge

[BOJ] λ°±μ€€ 16234번 인ꡬ 이동 - 파이썬(Python)

728x90

문제

N×N크기의 땅이 있고, 땅은 1×1개의 칸으둜 λ‚˜λˆ„μ–΄μ Έ μžˆλ‹€. 각각의 λ•…μ—λŠ” λ‚˜λΌκ°€ ν•˜λ‚˜μ”© μ‘΄μž¬ν•˜λ©°, rν–‰ c열에 μžˆλŠ” λ‚˜λΌμ—λŠ” A[r][c]λͺ…이 μ‚΄κ³  μžˆλ‹€. μΈμ ‘ν•œ λ‚˜λΌ μ‚¬μ΄μ—λŠ” ꡭ경선이 μ‘΄μž¬ν•œλ‹€. λͺ¨λ“  λ‚˜λΌλŠ” 1×1 크기이기 λ•Œλ¬Έμ—, λͺ¨λ“  ꡭ경선은 μ •μ‚¬κ°ν˜• ν˜•νƒœμ΄λ‹€.

μ˜€λŠ˜λΆ€ν„° 인ꡬ 이동이 μ‹œμž‘λ˜λŠ” 날이닀.

인ꡬ 이동은 ν•˜λ£¨ λ™μ•ˆ λ‹€μŒκ³Ό 같이 μ§„ν–‰λ˜κ³ , 더 이상 μ•„λž˜ 방법에 μ˜ν•΄ 인ꡬ 이동이 없을 λ•ŒκΉŒμ§€ μ§€μ†λœλ‹€.

  • ꡭ경선을 κ³΅μœ ν•˜λŠ” 두 λ‚˜λΌμ˜ 인ꡬ 차이가 Lλͺ… 이상, Rλͺ… μ΄ν•˜λΌλ©΄, λ‘ λ‚˜λΌκ°€ κ³΅μœ ν•˜λŠ” ꡭ경선을 였늘 ν•˜λ£¨ λ™μ•ˆ μ—°λ‹€.
  • μœ„μ˜ 쑰건에 μ˜ν•΄ μ—΄μ–΄μ•Όν•˜λŠ” ꡭ경선이 λͺ¨λ‘ μ—΄λ Έλ‹€λ©΄, 인ꡬ 이동을 μ‹œμž‘ν•œλ‹€.
  • ꡭ경선이 μ—΄λ €μžˆμ–΄ μΈμ ‘ν•œ μΉΈλ§Œμ„ μ΄μš©ν•΄ 이동할 수 있으면, κ·Έ λ‚˜λΌλ₯Ό 였늘 ν•˜λ£¨ λ™μ•ˆμ€ 연합이라고 ν•œλ‹€.
  • 연합을 이루고 μžˆλŠ” 각 칸의 μΈκ΅¬μˆ˜λŠ” (μ—°ν•©μ˜ 인ꡬ수) / (연합을 이루고 μžˆλŠ” 칸의 개수)κ°€ λœλ‹€. νŽΈμ˜μƒ μ†Œμˆ˜μ μ€ 버린닀.
  • 연합을 ν•΄μ²΄ν•˜κ³ , λͺ¨λ“  ꡭ경선을 λ‹«λŠ”λ‹€.

각 λ‚˜λΌμ˜ μΈκ΅¬μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 인ꡬ 이동이 λ©°μΉ  λ™μ•ˆ λ°œμƒν•˜λŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 N, L, R이 μ£Όμ–΄μ§„λ‹€. (1 ≤ N ≤ 50, 1 ≤ L ≤ R ≤ 100)

λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 각 λ‚˜λΌμ˜ μΈκ΅¬μˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. rν–‰ c열에 μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” A[r][c]의 값이닀. (0 ≤ A[r][c] ≤ 100)

인ꡬ 이동이 λ°œμƒν•˜λŠ” μΌμˆ˜κ°€ 2,000번 보닀 μž‘κ±°λ‚˜ 같은 μž…λ ₯만 μ£Όμ–΄μ§„λ‹€.

좜λ ₯

인ꡬ 이동이 λ©°μΉ  λ™μ•ˆ λ°œμƒν•˜λŠ”μ§€ 첫째 쀄에 좜λ ₯ν•œλ‹€.

 

https://www.acmicpc.net/problem/16234

 

16234번: 인ꡬ 이동

N×N크기의 땅이 있고, 땅은 1×1개의 칸으둜 λ‚˜λˆ„μ–΄μ Έ μžˆλ‹€. 각각의 λ•…μ—λŠ” λ‚˜λΌκ°€ ν•˜λ‚˜μ”© μ‘΄μž¬ν•˜λ©°, rν–‰ c열에 μžˆλŠ” λ‚˜λΌμ—λŠ” A[r][c]λͺ…이 μ‚΄κ³  μžˆλ‹€. μΈμ ‘ν•œ λ‚˜λΌ μ‚¬μ΄μ—λŠ” ꡭ경선이 μ‘΄μž¬ν•œλ‹€. λͺ¨

www.acmicpc.net

 

πŸ’‘ 풀이 및 μ½”λ“œ

from collections import deque

def bfs(x, y, open):
    queue = deque()
    queue.append((x, y))
    check[x][y] = 1
    open.add((x, y))
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            if nx < 0 or nx >= n or ny < 0 or ny >= n:
                continue
            if l <= abs(data[nx][ny] - data[x][y]) <= r and not check[nx][ny]:
                queue.append((nx, ny))
                check[nx][ny] = 1
                open.add((nx, ny))
    temp, count = 0, 0
    for op in open:
        temp += data[op[0]][op[1]]
        count += 1
    if count > 1:
        for op in open:
            data[op[0]][op[1]] = temp // count
        return True
    else:
        return False

data = []
n, l, r = map(int, input().split())
for _ in range(n):
    data.append(list(map(int, input().split())))

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
result, flag = 0, True
while flag:
    check = [[0]*n for _ in range(n)]
    flag = False
    for i in range(n):
        for j in range(n):
            if not check[i][j] and bfs(i, j, set()):
                flag = True
    if flag:
        result += 1
print(result)

bfsλ₯Ό μ΄μš©ν•˜μ—¬ ꡭ경을 ν™•μΈν•˜κ³ , 인ꡬ 수λ₯Ό μ‘°μ •ν•œλ‹€. λ‹€λ§Œ, PyPy3둜 μ œμΆœν•˜μ§€ μ•Šκ³  Python3둜 μ œμΆœν•œλ‹€λ©΄ μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚œλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 인ꡬ 수 쑰정을 bfs λ‚΄μ—μ„œ μ‹€ν–‰ν•˜μ§€ μ•Šκ³  bfsλ₯Ό 톡해 ꡭ경을 ν™•μΈν•˜μ—¬ κ·Έ 정보λ₯Ό λ¦¬μŠ€νŠΈμ— 넣은 ν›„ ν•œκΊΌλ²ˆμ— 인ꡬ 수λ₯Ό λ³€κ²½ν•΄μ£ΌλŠ” 방법을 λ– μ˜¬λ Έλ‹€. ν•˜μ§€λ§Œ μ—¬μ „νžˆ μ‹œκ°„μ΄ˆκ³ΌλŠ” ν•΄κ²°λ˜μ§€ μ•Šμ•˜λ‹€. 일단 PyPy3둜 μ œμΆœν•΄ 놓고 λ‹€μŒμ— λ‹€μ‹œ μ‹œλ„ν•΄λ³΄κ² λ‹€. λ³€κ²½ν–ˆλ˜ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

from collections import deque

def bfs(x, y, open):
    queue = deque()
    queue.append((x, y))
    check[x][y] = 1
    open.add((x, y))
    val, count = 0, 0
    while queue:
        x, y = queue.popleft()
        val += data[x][y]
        count += 1
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            if nx < 0 or nx >= n or ny < 0 or ny >= n:
                continue
            if l <= abs(data[nx][ny] - data[x][y]) <= r and not check[nx][ny]:
                queue.append((nx, ny))
                check[nx][ny] = 1
                open.add((nx, ny))
    return val, count, open 

data = []
n, l, r = map(int, input().split())
for _ in range(n):
    data.append(list(map(int, input().split())))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
result, flag = 0, True
while flag:
    check = [[0]*n for _ in range(n)]
    all = []
    flag = False
    for i in range(n):
        for j in range(n):
            if not check[i][j]:
                val, count, open = bfs(i, j, set())
                if count > 1:
                    flag = True
                    all.append((val//count, open))
    for val, op in all:
        for x, y in op:
            data[x][y] = val
    if flag:
        result += 1
print(result)
728x90

'Algorithm > πŸ“˜ Baekjoon Judge' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] λ°±μ€€ 14499번 μ£Όμ‚¬μœ„ ꡴리기 - 파이썬(Python)  (0) 2022.04.02
[BOJ] λ°±μ€€ 20055번 컨베이어 벨트 μœ„μ˜ λ‘œλ΄‡ - 파이썬(Python)  (0) 2022.04.01
[BOJ] λ°±μ€€ 14500번 ν…ŒνŠΈλ‘œλ―Έλ…Έ - 파이썬(Python)  (0) 2022.03.31
[BOJ] λ°±μ€€ 3190번 λ±€ - 파이썬(Python)  (3) 2022.02.23
[BOJ] λ°±μ€€ 1238번 νŒŒν‹° - 파이썬(Python)  (0) 2022.01.19
    'Algorithm/πŸ“˜ Baekjoon Judge' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ 글이닀
    • [BOJ] λ°±μ€€ 14499번 μ£Όμ‚¬μœ„ ꡴리기 - 파이썬(Python)
    • [BOJ] λ°±μ€€ 20055번 컨베이어 벨트 μœ„μ˜ λ‘œλ΄‡ - 파이썬(Python)
    • [BOJ] λ°±μ€€ 14500번 ν…ŒνŠΈλ‘œλ―Έλ…Έ - 파이썬(Python)
    • [BOJ] λ°±μ€€ 3190번 λ±€ - 파이썬(Python)
    J1Yun
    J1Yun
    개발 κ΄€λ ¨ 기술 및 곡뢀 λ‚΄μš© 기둝μž₯

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”