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
def solution(places):
    answer = []
    for place in places:
        candidate = find_candidate(place)
        answer.append(check_observe_distance(place, candidate))
    return answer

def find_candidate(place):
    candidate = []
    for i in range(5):
        for j in range(5):
            if place[i][j] == 'P':
                candidate.append((i, j))
    return candidate

def check_observe_distance(place, candidate):
    for i in range(len(candidate)-1):
        now_x, now_y = candidate[i]
        for j in range(i+1, len(candidate)):
            if i == j:
                continue
            next_x, next_y = candidate[j]
            manhattan = abs(now_x - next_x) + abs(now_y - next_y)
            diff_x, diff_y = abs(now_x - next_x), abs(now_y - next_y)
            # ๋งจํ—ˆํŠผ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ดํ•˜์ธ ๊ฒฝ์šฐ
            if manhattan <= 1:
                return 0
            # ๋งจํ—ˆํŠผ ๊ฑฐ๋ฆฌ๊ฐ€ 2์ธ ๊ฒฝ์šฐ
            if manhattan == 2:
                # ๊ฐ€๋กœ ๊ธธ์ด 2์ธ ๊ฒฝ์šฐ ์ค‘ ํŒŒํ‹ฐ์…˜ ์—†๋Š” ๊ฒฝ์šฐ
                if diff_x == 2 and place[min(now_x, next_x)+1][now_y] != 'X':
                    return 0
                # ์„ธ๋กœ ๊ธธ์ด 2์ธ ๊ฒฝ์šฐ ์ค‘ ํŒŒํ‹ฐ์…˜ ์—†๋Š” ๊ฒฝ์šฐ
                elif diff_y == 2 and place[now_x][min(now_y, next_y)+1] != 'X':
                    return 0
                # ๋Œ€๊ฐ์„ ์ธ ๊ฒฝ์šฐ ์ค‘ ํŒŒํ‹ฐ์…˜ ์—†๋Š” ๊ฒฝ์šฐ
                elif place[now_x][next_y] == 'O' or place[next_x][now_y] == 'O':
                    return 0
    return 1
  • ์‹คํ–‰ ๊ฒฐ๊ณผ
ํ…Œ์ŠคํŠธ 1 ใ€‰ํ†ต๊ณผ (0.16ms, 10.4MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰ํ†ต๊ณผ (0.05ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰ํ†ต๊ณผ (0.04ms, 10.3MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰ํ†ต๊ณผ (0.06ms, 10.2MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰ํ†ต๊ณผ (0.04ms, 10.4MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰ํ†ต๊ณผ (0.03ms, 10.3MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰ํ†ต๊ณผ (0.08ms, 10.4MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰ํ†ต๊ณผ (0.04ms, 10.3MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰ํ†ต๊ณผ (0.04ms, 10.2MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰ํ†ต๊ณผ (0.03ms, 10.4MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰ํ†ต๊ณผ (0.04ms, 10.2MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰ํ†ต๊ณผ (0.03ms, 10.4MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰ํ†ต๊ณผ (0.03ms, 10.3MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰ํ†ต๊ณผ (0.06ms, 10.2MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰ํ†ต๊ณผ (0.05ms, 10.2MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰ํ†ต๊ณผ (0.06ms, 10.3MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰ํ†ต๊ณผ (0.07ms, 10.2MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰ํ†ต๊ณผ (0.08ms, 10.1MB)
ํ…Œ์ŠคํŠธ 21 ใ€‰ํ†ต๊ณผ (0.07ms, 10.2MB)
ํ…Œ์ŠคํŠธ 22 ใ€‰ํ†ต๊ณผ (0.06ms, 10.4MB)
ํ…Œ์ŠคํŠธ 23 ใ€‰ํ†ต๊ณผ (0.02ms, 10.3MB)
ํ…Œ์ŠคํŠธ 24 ใ€‰ํ†ต๊ณผ (0.03ms, 10.3MB)
ํ…Œ์ŠคํŠธ 25 ใ€‰ํ†ต๊ณผ (0.03ms, 10.4MB)
ํ…Œ์ŠคํŠธ 26 ใ€‰ํ†ต๊ณผ (0.02ms, 10.1MB)
ํ…Œ์ŠคํŠธ 27 ใ€‰ํ†ต๊ณผ (0.03ms, 10.3MB)
ํ…Œ์ŠคํŠธ 28 ใ€‰ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 29 ใ€‰ํ†ต๊ณผ (0.05ms, 10.4MB)
ํ…Œ์ŠคํŠธ 30 ใ€‰ํ†ต๊ณผ (0.03ms, 10.4MB)
ํ…Œ์ŠคํŠธ 31 ใ€‰ํ†ต๊ณผ (0.05ms, 10.4MB)


3. ํ•ด์„ค

๊ฐ•์˜์‹ค ๋ณ„ ์‘์‹œ์ž๋“ค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋‹ด์€ candidate๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ๊ฐ•์˜์‹ค ๋ณ„ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋ฅผ ํŒŒ์•…ํ•œ๋‹ค.

๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋งจํ—ˆํŠผ ๊ฑฐ๋ฆฌ = 1
  2. ๋งจํ—ˆํŠผ ๊ฑฐ๋ฆฌ = 2
    1. ๊ฐ€๋กœ ๊ฑฐ๋ฆฌ ํ˜น์€ ์„ธ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ 2์ฐจ์ด ์ผ๋•Œ ๊ฐ€์šด๋ฐ ์œ„์น˜์— ํŒŒํ‹ฐ์…˜์ด ์—†๋Š” ๊ฒฝ์šฐ
    2. ๋Œ€๊ฐ์„ ์— ์‘์‹œ์ž๋“ค์ด ์œ„์น˜ํ•  ๋•Œ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ ๋Œ€๊ฐ์„  ์ค‘ ํŒŒํ‹ฐ์…˜์ด ํ•˜๋‚˜๋ผ๋„ ์—†๋Š” ๊ฒฝ์šฐ

candidate ์œ„์น˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ์œ„์˜ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์ผ ๋•Œ๋Š” 0์„ ๋ฆฌํ„ด, ๊ทธ ์ด์™ธ๋Š” 1์„ ๋ฆฌํ„ดํ•˜๋Š” check_observe_distance ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ ํ›„ answer์— ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

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