Post

๐Ÿข ๋ฏธ๋กœ ํƒˆ์ถœ ๋ช…๋ ์–ด

1. ๋ฌธ์ œ ๋งํฌ

๋ฏธ๋กœ ํƒˆ์ถœ ๋ช…๋ ์–ด


2. ์ฝ”๋“œ

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
"""
๋ฏธ๋กœ ํƒˆ์ถœ ๋ช…๋ น์–ด

๐Ÿ’› ๋ฌธ์ œ
n x m ๊ฒฉ์ž ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ๋ฏธ๋กœ์˜ (x, y)์—์„œ ์ถœ๋ฐœํ•ด (r, c)๋กœ ์ด๋™ํ•ด์„œ ํƒˆ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ, ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋Š” ์กฐ๊ฑด์ด ์„ธ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๊ฒฉ์ž์˜ ๋ฐ”๊นฅ์œผ๋กœ๋Š” ๋‚˜๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    (x, y)์—์„œ (r, c)๊นŒ์ง€ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ์ด k์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
        ์ด๋•Œ, (x, y)์™€ (r, c)๊ฒฉ์ž๋ฅผ ํฌํ•จํ•ด, ๊ฐ™์€ ๊ฒฉ์ž๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ๋ฐฉ๋ฌธํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.
    ๋ฏธ๋กœ์—์„œ ํƒˆ์ถœํ•œ ๊ฒฝ๋กœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋‚˜ํƒ€๋ƒˆ์„ ๋•Œ,
        ๋ฌธ์ž์—ด์ด ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ๋กœ ํƒˆ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋™ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    l: ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
    r: ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
    u: ์œ„์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
    d: ์•„๋ž˜์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™

์˜ˆ๋ฅผ ๋“ค์–ด, ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ, ์œ„๋กœ ํ•œ ์นธ, ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์›€์ง์˜€๋‹ค๋ฉด, ๋ฌธ์ž์—ด "lul"๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฏธ๋กœ์—์„œ๋Š” ์ธ์ ‘ํ•œ ์ƒ, ํ•˜, ์ขŒ, ์šฐ ๊ฒฉ์ž๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3 x 4 ๊ฒฉ์ž๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
....
..S.
E...
๋ฏธ๋กœ์˜ ์ขŒ์ธก ์ƒ๋‹จ์€ (1, 1)์ด๊ณ  ์šฐ์ธก ํ•˜๋‹จ์€ (3, 4)์ž…๋‹ˆ๋‹ค.
 .์€ ๋นˆ ๊ณต๊ฐ„, S๋Š” ์ถœ๋ฐœ ์ง€์ , E๋Š” ํƒˆ์ถœ ์ง€์ ์ž…๋‹ˆ๋‹ค.

ํƒˆ์ถœ๊นŒ์ง€ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฑฐ๋ฆฌ k๊ฐ€ 5๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    lldud
    ulldd
    rdlll
    dllrl
    dllud
    ...

์ด๋•Œ dllrl๋ณด๋‹ค ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๋น ๋ฅธ ๊ฒฝ๋กœ๋กœ ํƒˆ์ถœํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๊ฒฉ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋œปํ•˜๋Š” ์ •์ˆ˜ n, m, ์ถœ๋ฐœ ์œ„์น˜๋ฅผ ๋œปํ•˜๋Š” ์ •์ˆ˜ x, y,
ํƒˆ์ถœ ์ง€์ ์„ ๋œปํ•˜๋Š” ์ •์ˆ˜ r, c, ํƒˆ์ถœ๊นŒ์ง€ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๋œปํ•˜๋Š” ์ •์ˆ˜ k๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
์ด๋•Œ, ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ๋กœ๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.
๋‹จ, ์œ„ ์กฐ๊ฑด๋Œ€๋กœ ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ "impossible"์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงก ์ œํ•œ ์‚ฌํ•ญ
2 โ‰ค n (= ๋ฏธ๋กœ์˜ ์„ธ๋กœ ๊ธธ์ด) โ‰ค 50
2 โ‰ค m (= ๋ฏธ๋กœ์˜ ๊ฐ€๋กœ ๊ธธ์ด) โ‰ค 50
1 โ‰ค x โ‰ค n
1 โ‰ค y โ‰ค m
1 โ‰ค r โ‰ค n
1 โ‰ค c โ‰ค m
(x, y) โ‰  (r, c)
1 โ‰ค k โ‰ค 2,500

๐Ÿ’š ์ž…์ถœ๋ ฅ
n	m	x	y	r	c	k	result
3	4	2	3	3	1	5	"dllrl"
2	2	1	1	2	2	2	"dr"
3	3	1	2	3	3	4	"impossible"
"""

from collections import deque

def distance(x, y, r, c) :
    return abs(x - (r-1)) + abs(y - (c-1))

# ๊ฒฉ์ž์˜ ํฌ๊ธฐ n, m, ์ถœ๋ฐœ ์œ„์น˜ x, y, ํƒˆ์ถœ ์ง€์  r, c, ํƒˆ์ถœ๊นŒ์ง€ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฑฐ๋ฆฌ k
def solution(n, m, x, y, r, c, k):
    answer = ""

    # k > ์ตœ๋‹จ ๊ฑฐ๋ฆฌ, ์ตœ๋‹จ๊ฑฐ๋ฆฌ - k ๊ฐ€ ์™”๋‹ค ๊ฐ”๋‹ค ์™•๋ณต์ด ์•ˆ๋˜๋Š” ํ™€์ˆ˜๋ผ๋ฉด ๋„์ฐฉ ๋ถˆ๊ฐ€
    if distance(x-1, y-1, r, c) > k or ((distance(x-1, y-1, r, c) - k) % 2 == 1) :
        return "impossible"

    # d l r u
    dir = ["d", "l", "r", "u"]
    dx = [1, 0, 0, -1]
    dy = [0, -1, 1, 0]

    queue = deque()
    queue.append((x - 1, y - 1, 0, ""))

    while queue:
        x1, y1, cnt, answer = queue.popleft()
        if (x1 == r-1) and (y1 == c-1) and cnt == k :
            return answer

        for i in range(4) :
            nx = x1 + dx[i]
            ny = y1 + dy[i]

            if 0 <= nx < n and 0 <= ny < m :
                # ๋‚จ์€ ๊ฑฐ๋ฆฌ + ์ด๋™ํ–ˆ๋˜ ๊ฑฐ๋ฆฌ + ๊ทธ๋‹ด ๊ฑฐ๋ฆฌ 1 > k ์ด๋ฉด ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ใ„ฑใ„ฑ
                if distance(nx, ny, r, c) + cnt + 1 > k :
                    continue
                # queue ์—…๋Žƒ ํ•˜๊ณ  ๋‹ค์‹œ d ๋ถ€ํ„ฐ
                answer += dir[i]
                queue.append((nx, ny, cnt+1, answer))
                break

  • ์ •ํ™•์„ฑ

    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
    
      ์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ
      ํ…Œ์ŠคํŠธ 1 ใ€‰ ํ†ต๊ณผ (0.11ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 2 ใ€‰ ํ†ต๊ณผ (0.26ms, 10.4MB)
      ํ…Œ์ŠคํŠธ 3 ใ€‰ ํ†ต๊ณผ (0.00ms, 10.5MB)
      ํ…Œ์ŠคํŠธ 4 ใ€‰ ํ†ต๊ณผ (0.02ms, 10.5MB)
      ํ…Œ์ŠคํŠธ 5 ใ€‰ ํ†ต๊ณผ (0.02ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 6 ใ€‰ ํ†ต๊ณผ (0.02ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 7 ใ€‰ ํ†ต๊ณผ (0.02ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 8 ใ€‰ ํ†ต๊ณผ (0.02ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 9 ใ€‰ ํ†ต๊ณผ (2.71ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 10 ใ€‰ ํ†ต๊ณผ (2.53ms, 10.5MB)
      ํ…Œ์ŠคํŠธ 11 ใ€‰ ํ†ต๊ณผ (2.65ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 12 ใ€‰ ํ†ต๊ณผ (2.50ms, 10.4MB)
      ํ…Œ์ŠคํŠธ 13 ใ€‰ ํ†ต๊ณผ (2.54ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 14 ใ€‰ ํ†ต๊ณผ (2.64ms, 10.4MB)
      ํ…Œ์ŠคํŠธ 15 ใ€‰ ํ†ต๊ณผ (2.50ms, 10.4MB)
      ํ…Œ์ŠคํŠธ 16 ใ€‰ ํ†ต๊ณผ (2.56ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 17 ใ€‰ ํ†ต๊ณผ (2.68ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 18 ใ€‰ ํ†ต๊ณผ (2.64ms, 10.4MB)
      ํ…Œ์ŠคํŠธ 19 ใ€‰ ํ†ต๊ณผ (2.48ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 20 ใ€‰ ํ†ต๊ณผ (2.68ms, 10.4MB)
      ํ…Œ์ŠคํŠธ 21 ใ€‰ ํ†ต๊ณผ (3.06ms, 10.4MB)
      ํ…Œ์ŠคํŠธ 22 ใ€‰ ํ†ต๊ณผ (2.52ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 23 ใ€‰ ํ†ต๊ณผ (2.66ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 24 ใ€‰ ํ†ต๊ณผ (2.57ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 25 ใ€‰ ํ†ต๊ณผ (2.66ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 26 ใ€‰ ํ†ต๊ณผ (2.75ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 27 ใ€‰ ํ†ต๊ณผ (2.46ms, 10.2MB)
      ํ…Œ์ŠคํŠธ 28 ใ€‰ ํ†ต๊ณผ (2.59ms, 10.5MB)
      ํ…Œ์ŠคํŠธ 29 ใ€‰ ํ†ต๊ณผ (2.58ms, 10.3MB)
      ํ…Œ์ŠคํŠธ 30 ใ€‰ ํ†ต๊ณผ (2.73ms, 10.1MB)
      ํ…Œ์ŠคํŠธ 31 ใ€‰ ํ†ต๊ณผ (0.00ms, 10.4MB)
      ์ฑ„์  ๊ฒฐ๊ณผ
      ์ •ํ™•์„ฑ: 100.0
      ํ•ฉ๊ณ„: 100.0 / 100.0
    


3. ํ•ด์„ค

dlru ์ˆœ์„œ๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ์™€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” k ๋ฅผ ํ†ตํ•ด queue ์— ์ง‘์–ด ๋„ฃ๋Š”๋‹ค

์ด๋ฏธ ์ˆœ์„œ๋ฅผ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๋Œ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ sort ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค

๋จผ์ €, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋บ€ ํ›„ ๋‚˜๋จธ์ง€ ๊ฑฐ๋ฆฌ๋ฅผ ์™•๋ณต์œผ๋กœ ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์ˆ˜ํ–‰ํ•œ๋‹ค

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