Post

🐒 페그 μ†”λ¦¬ν…Œμ–΄

1. 문제 링크

9207번: 페그 μ†”λ¦¬ν…Œμ–΄


2. μ½”λ“œ

PyPy3 111464KB 152ms

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""
[9207] 페그 μ†”λ¦¬ν…Œμ–΄

πŸ’› 문제
페그 μ†”λ¦¬ν…Œμ–΄λŠ” ꡬ멍이 λš«λ €μžˆλŠ” 이차원 κ²Œμž„νŒμ—μ„œ ν•˜λŠ” κ²Œμž„μ΄λ‹€. 각 κ΅¬λ©μ—λŠ” 핀을 ν•˜λ‚˜ 꽂을 수 μžˆλ‹€.

핀은 μˆ˜ν‰, 수직 λ°©ν–₯으둜 μΈμ ‘ν•œ 핀을 λ›°μ–΄λ„˜μ–΄μ„œ κ·Έ ν•€μ˜ λ‹€μŒ 칸으둜 μ΄λ™ν•˜λŠ” κ²ƒλ§Œ ν—ˆμš©λœλ‹€.
μΈμ ‘ν•œ ν•€μ˜ λ‹€μŒ 칸은 λΉ„μ–΄μžˆμ–΄μ•Ό ν•˜κ³  κ·Έ μΈμ ‘ν•œ 핀은 μ œκ±°λœλ‹€.

ν˜„μž¬ κ²Œμž„νŒμ— κ½‚ν˜€μžˆλŠ” ν•€μ˜ μƒνƒœκ°€ 주어진닀.
μ΄λ•Œ, 핀을 적절히 μ›€μ§μ—¬μ„œ κ²Œμž„νŒμ— λ‚¨μ•„μžˆλŠ” ν•€μ˜ 개수λ₯Ό μ΅œμ†Œλ‘œ ν•˜λ €κ³  ν•œλ‹€.
또, κ·Έλ ‡κ²Œ 남기기 μœ„ν•΄ ν•„μš”ν•œ μ΅œμ†Œ μ΄λ™νšŸμˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ’š μž…λ ₯
첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수 1 ≀ N ≀ 100이 주어진닀. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” κ²Œμž„νŒμ˜ 초기 μƒνƒœμ΄λ‹€.
κ²Œμž„νŒμ€ λͺ¨λ‘ 같은 λͺ¨μ–‘을 가진닀.
'.'λŠ” 빈 μΉΈ, 'o'λŠ” 핀이 κ½‚ν˜€μžˆλŠ” μΉΈ, '#'λŠ” ꡬ멍이 μ—†λŠ” 칸이닀. ν•€μ˜ κ°œμˆ˜λŠ” μ΅œλŒ€ 8이며,
각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” 빈 μ€„λ‘œ κ΅¬λΆ„λ˜μ–΄μ Έ μžˆλ‹€.

πŸ’™ 좜λ ₯
각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄μ„œ, 핀을 μ›€μ§μ—¬μ„œ 남길 수 μžˆλŠ” ν•€μ˜ μ΅œμ†Œ κ°œμˆ˜μ™€
κ·Έ 개수λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ ν•„μš”ν•œ μ΅œμ†Œ 이동 횟수λ₯Ό 좜λ ₯ν•œλ‹€.
"""

from sys import stdin # μž…λ ₯이 λ§Žμ§€λŠ” μ•Šμ§€λ§Œ κ·Έλž˜λ„ ν•΄μ£ΌλŠ” 것이 μ’‹λ‹€.
input=stdin.readline

dx=[0,0,1,-1]
dy=[1,-1,0,0]

def solve(cnt):
    global remains, moves
    array=[]
    for i in range(5):
        for j in range(9):
                        # ν˜„μž¬ μœ„μΉ˜μ— νŽ˜κ·Έκ°€ μžˆλŠ”μ§€ 확인
            if graph[i][j]=='o':
                array.append((j,i))

    if len(array) < remains:
        moves = cnt
        remains = len(array)

    for x,y in array:
        for i in range(4): # 4λ°©ν–₯ 이동
            nx=x+dx[i]
            ny=y+dy[i]
            # 페그λ₯Ό 움직일 수 μžˆλŠ” 쑰건 확인
            if -1<nx+dx[i]<9 and -1<ny+dy[i]<5:
                if graph[ny][nx]=='o' and graph[ny+dy[i]][nx+dx[i]]=='.':
                    graph[ny][nx]='.'
                    graph[ny+dy[i]][nx+dx[i]]='o'
                    graph[y][x]='.'
                    solve(cnt+1)

                    # 을 제거 μ΄μ „μƒνƒœ
                    graph[ny][nx]='o'
                    graph[ny+dy[i]][nx+dx[i]]='.'
                    graph[y][x]='o'

# ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수
n = int(input())

for _ in range(n):
    # '.'λŠ” 빈 μΉΈ, 'o'λŠ” 핀이 κ½‚ν˜€μžˆλŠ” μΉΈ, '#'λŠ” ꡬ멍이 μ—†λŠ” μΉΈ
    graph = [list(input().rstrip()) for i in range(5)]
    input()

    # 핀을 μ›€μ§μ—¬μ„œ 남길 수 μžˆλŠ” ν•€μ˜ μ΅œμ†Œ κ°œμˆ˜μ™€ κ·Έ 개수λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ ν•„μš”ν•œ μ΅œμ†Œ 이동 횟수
    remains, moves = 10, 10
    solve(0)
    print(remains, moves)


3. ν•΄μ„€

This post is licensed under CC BY 4.0 by the author.