[๋ฐฑ์ค€] 11559 puyopuyo (ํŒŒ์ด์ฌ python)

2023. 3. 26. 04:36ยท๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

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

 

11559๋ฒˆ: Puyo Puyo

์ด 12๊ฐœ์˜ ์ค„์— ํ•„๋“œ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ์ค„์—๋Š” 6๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ .์€ ๋นˆ๊ณต๊ฐ„์ด๊ณ  .์ด ์•„๋‹Œ๊ฒƒ์€ ๊ฐ๊ฐ์˜ ์ƒ‰๊น”์˜ ๋ฟŒ์š”๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. R์€ ๋นจ๊ฐ•, G๋Š” ์ดˆ๋ก, B๋Š” ํŒŒ๋ž‘, P๋Š” ๋ณด๋ผ, Y๋Š” ๋…ธ๋ž‘์ด๋‹ค.

www.acmicpc.net


bfs๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ.


์•„์ด๋””์–ด


์ „์ฒด ์ฝ”๋“œ

from collections import deque
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
field_info = []

for _ in range(12):
    field_info.append(list(input()))

def bfs(a, b, c):
    global boom_flag
    boom_list = []
    deq = deque()

    deq.append([a,b])
    boom_list.append([a,b])

    field_check[a][b] = True

    n = 1

    while deq:
        x, y = deq.popleft()

        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            if 0 <= nx < 12 and 0 <= ny < 6:
                if field_info[nx][ny] == c and not field_check[nx][ny]:
                    field_check[nx][ny] = True
                    deq.append([nx,ny])
                    boom_list.append([nx,ny])
                    n += 1

    if n >= 4:
        for b in boom_list:
            field_info[b[0]][b[1]] = '.'

        boom_flag = True

boom_count = 0

while True:
    boom_flag = False

    field_check = [[False] * 6 for _ in range(12)]

    for i in range(12):
        for j in range(6):
            if field_info[i][j] != '.':
                bfs(i,j,field_info[i][j])


    for i in range(6):
        rotate_queue = deque()

        for j in range(11,-1,-1):
            if field_info[j][i] != '.':
                rotate_queue.append(field_info[j][i])

        for j in range(11,-1,-1):
            if rotate_queue:
                field_info[j][i] = rotate_queue.popleft()
            else:
                field_info[j][i] = '.'

    if not boom_flag:
        break
    else:
        boom_count += 1

print(boom_count)

์ฝ”๋“œ ์„ค๋ช…

1. bfs

for i in range(12):
    for j in range(6):
        if field_info[i][j] != '.':
            bfs(i,j,field_info[i][j])

ํ•„๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์นธ์— ๋Œ€ํ•ด ๋นˆ์นธ('.')์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๊ณ  ๋นˆ์นธ์ด ์•„๋‹ˆ๋ฉด bfs๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

bfs ํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

def bfs(a, b, c):
    global boom_flag
    boom_list = [] # ํ„ฐํŠธ๋ฆด ์œ„์น˜๋ฅผ ์ €์žฅ
    deq = deque() # bfs๋ฅผ ์œ„ํ•œ ํ

    deq.append([a,b]) 
    boom_list.append([a,b])

    field_check[a][b] = True

    n = 1 #๋ฟŒ์š” ๊ฐœ์ˆ˜

    while deq:
        x, y = deq.popleft()

        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            if 0 <= nx < 12 and 0 <= ny < 6:
                if field_info[nx][ny] == c and not field_check[nx][ny]:
                    field_check[nx][ny] = True
                    deq.append([nx,ny])
                    boom_list.append([nx,ny])
                    n += 1 #๋ธ”๋Ÿญ ๊ฐœ์ˆ˜ +1 

    if n >= 4:
        for b in boom_list:
            field_info[b[0]][b[1]] = '.' #ํ„ฐ์ง„๊ณณ์€ ๋นˆ์นธ์œผ๋กœ ๋ณ€๊ฒฝ

        boom_flag = True #ํ„ฐ์ง

bfs ํ•˜๋ฉด์„œ ์ž…๋ ฅ๋ฐ›์•˜๋˜ ๋ธ”๋ก์˜ ์ƒ‰๊น” c์™€ ๊ฐ™๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์นธ์ด๋ฉด ํ์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

์—ฐ๊ฒฐ๋œ ๋ฟŒ์š” ๊ฐœ์ˆ˜๊ฐ€ 4๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ๋นˆ์นธ์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๊ณ , flag๋ฅผ true๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

2. ๋ฟŒ์š” ๋‚ด๋ฆฌ๊ธฐ

for i in range(6):
    rotate_queue = deque()

    for j in range(11,-1,-1):
        if field_info[j][i] != '.':
            rotate_queue.append(field_info[j][i])

    for j in range(11,-1,-1):
        if rotate_queue:
            field_info[j][i] = rotate_queue.popleft()
        else:
            field_info[j][i] = '.'

๋นˆ์นธ์„ ์ฑ„์›Œ์ฃผ๋Š” ์ฝ”๋“œ๋‹ค. ๊ฐ ์—ด๋งˆ๋‹ค, ๋ฐ‘์—์„œ๋ถ€ํ„ฐ ์Šค์บ”ํ•˜๋ฉฐ ๋ฟŒ์š”๋ฅผ rotate_queue์— ๋„ฃ์–ด์ฃผ๊ณ , 

๋‹ค์‹œ ๋ฐ‘์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ฟŒ์š”๋ฅผ ์Œ“์•„์ค€๋‹ค. ์ „๋ถ€ ๋‹ค ์Œ“๊ณ  ๋‚œ ๋’ค ๋นˆ์นธ์œผ๋กœ ์ฑ„์›Œ์ค€๋‹ค.

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿงฉ Problem Solving > [๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 9205 ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ (python ํŒŒ์ด์ฌ)  (0) 2023.04.09
[๋ฐฑ์ค€] 1759 ์•”ํ˜ธ๋งŒ๋“ค๊ธฐ (python ํŒŒ์ด์ฌ)  (0) 2023.03.30
[๋ฐฑ์ค€] 2583 ์˜์—ญ ๊ตฌํ•˜๊ธฐ(python ํŒŒ์ด์ฌ)  (0) 2023.03.16
[๋ฐฑ์ค€] 14938 ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ (python ํŒŒ์ด์ฌ)  (0) 2022.09.10
[๋ฐฑ์ค€]11660 ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5 (python ํŒŒ์ด์ฌ)  (0) 2022.08.19
'๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 9205 ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 1759 ์•”ํ˜ธ๋งŒ๋“ค๊ธฐ (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 2583 ์˜์—ญ ๊ตฌํ•˜๊ธฐ(python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 14938 ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ (python ํŒŒ์ด์ฌ)
์ œ๋ด‰์•„
์ œ๋ด‰์•„
  • ์ œ๋ด‰์•„
    Overthinking
    ์ œ๋ด‰์•„
    fake it till you make it.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (106)
      • ๐Ÿงฉ Problem Solving (83)
        • [๋ฐฑ์ค€] (74)
        • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (7)
        • [SW Expert Academy] (1)
        • [์•Œ๊ณ ๋ฆฌ์ฆ˜ for PS] (1)
      • ๐Ÿ“ฆ Data Structure (2)
      • ๐Ÿ“œ Language (14)
        • [python] (14)
      • ๐Ÿ–ค Git (1)
      • ๐ŸŒ† ์ผ์ƒ (4)
        • ๐Ÿ’ฌ ๋ฒฝ๋ณด๊ณ  ๋งํ•˜๊ธฐ (4)
      • ๐Ÿ—„๏ธ ๊ธฐํƒ€ (2)
      • ๐Ÿ”ต css (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ตฌํ˜„
    Bruteforce
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ํŒฐ๋ฆฐ๋“œ๋กฌ
    SWEA
    ๋ฐฑํŠธ๋ž˜ํ‚น
    ๋ˆ„์ ํ•ฉ
    slicing
    ๋ถ€๋ถ„ํ•ฉ
    ๊ทธ๋ฆฌ๋””
    ๋ถ„ํ•  ์ •๋ณต
    ๋ƒ…์ƒ‰
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ๋ฐฑ์ค€
    DP
    boj
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ์žฌ๊ท€
    ์œ„์ƒ์ •๋ ฌ
    ํˆฌํฌ์ธํ„ฐ
    imos
    DFS
    ์ •์ฒ˜๊ธฐ
    ํ”Œ๋กœ์ด๋“œ์›Œ์…œ
    ๋ฐ๋ธŒ์ฝ”์Šค
    ์Šคํƒ
    BFS
    Python
    ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ
    ํŒŒ์ด์ฌ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ œ๋ด‰์•„
[๋ฐฑ์ค€] 11559 puyopuyo (ํŒŒ์ด์ฌ python)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”