Hiya_
๊ฐœ๋ฐœ์ž์ทจ๐ŸŒฑ
Hiya_
Github
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (154)
    • ๐Ÿ’ปBackend (10)
      • ๋ผ์ด์ง•์บ ํ”„ (6)
      • SSAFY | ์‹ธํ”ผ (2)
      • ์‹ ํ•œDS ๊ธˆ์œตSW ์•„์นด๋ฐ๋ฏธ (2)
    • ๐Ÿ“๋ฌธ์ œ ํ’€์ด (102)
      • ๐ŸงฉBaekjoon (47)
      • ๐ŸงฉProgrammers (42)
      • ๐ŸงฉSWExpertAcademy (10)
      • ๐ŸงฉSofteer (3)
    • ๐Ÿ“‚Language (31)
      • Python (3)
      • JAVA (2)
      • SQL (6)
      • English (19)
    • โœจUseful information (5)
    • ๐Ÿ”‘Algorithms (3)
    • ๐Ÿ™Git (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ํ† ์ต๋ฌด๋ฃŒ๊ฐ•์˜
  • ํ•ด์ปค์Šคํ† ์ต
  • ๊ตฌํ˜„
  • sort
  • ํ† ์ต์ ์ˆ˜
  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • ๋‹ค์ต์ŠคํŠธ๋ผ
  • ์˜ค๋ธ”์™„
  • ์™„์ „ํƒ์ƒ‰
  • Python
  • ๋‚ด์žฅํ•จ์ˆ˜
  • ํ† ์ต๊ธฐ์ถœ
  • UNION ALL
  • ์ •๋ ฌ
  • ๋ฐฑ์ค€
  • ํ† ์ตRC
  • ํ† ์ต๋…ํ•™
  • mysql
  • ํ† ์ต๋ฌด๋ฃŒ์ž๋ฃŒ
  • BaekJoon
  • ์ฝ”ํ…Œ
  • ๊ทธ๋ฆฌ๋””
  • ๋ฆฌ์ŠคํŠธ
  • BFS
  • ํ•ด์ปค์ŠคํŒŒ๋žญ์ด
  • greedy algorithm
  • 2์ฐจ์› ๋ฐฐ์—ด
  • ํ† ์ต์‹œํ—˜
  • ํ† ์ต๊ณต๋ถ€
  • Union

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ


Owner : ๊น€์‹ ์˜
Naver Blog

hELLO ยท Designed By ์ •์ƒ์šฐ.
Hiya_

๊ฐœ๋ฐœ์ž์ทจ๐ŸŒฑ

๐Ÿ“๋ฌธ์ œ ํ’€์ด/๐ŸงฉSofteer

[Python] [HSAT 7ํšŒ ์ •๊ธฐ ์ฝ”๋”ฉ ์ธ์ฆํ‰๊ฐ€ ๊ธฐ์ถœ] ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๊ธฐ

2024. 8. 28. 02:28

 

~๋ชฉ์ฐจ~

๋ฌธ์ œ

๋ฌธ์ œ ํ•ด๊ฒฐ ํฌ์ธํŠธ

์ž‘์„ฑ ์ฝ”๋“œ


 

๋ฌธ์ œ

https://softeer.ai/practice/6246

 

Softeer - ํ˜„๋Œ€์ž๋™์ฐจ๊ทธ๋ฃน SW์ธ์žฌํ™•๋ณดํ”Œ๋žซํผ

 

softeer.ai

 

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

- '์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐฉ๋ฌธ ๋ฃจํŠธ ๊ตฌํ•˜๊ธฐ'๋ผ๊ณ  ์ธ์ง€ํ•˜์ž๋งˆ์ž  DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)์ž„์„ ์ธ์ง€ํ–ˆ๋‹ค.

- ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ์œ„ํ•œ visited ๋ฐฐ์—ด์ด ํ•„์š”ํ•จ์„ ๋– ์˜ฌ๋ ธ๋‹ค.

 

- ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ๋ณด์•˜์„ ๋•Œ

   1) ์œ ํšจํ•œ ๊ณต๊ฐ„( 0 ~ n-1 )์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ 

   2) ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ณ 

   3) ๋ฒฝ์ด ์•„๋‹Œ

 

- ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๊ณ  ์žˆ๋Š”๊ฐ€?

  ์ฒซ์‹œ๋„) ๋ฐฉ๋ฌธํ•  ์œ„์น˜๊ฐ€ ์ง€๋‚˜์•ผํ•  ์œ„์น˜ ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋˜๋Š”๋ฐ, ์ˆœ์„œ๊ฐ€ ๋งž์ง€ ์•Š์„ ๋•Œ ํ•ด๋‹น ๋ฃจํŠธ๋Š” ๋”์ด์ƒ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค

 

=> ์ฒซ์‹œ๋„์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋˜ ๊ฒƒ์€ ์ž˜๋ชป ๋œ ๋ฌธ๋ฒ•์˜ ์‚ฌ์šฉ๊ณผ ๋ณต์žกํ•˜๊ณ  ๊ตฌ๋ฉ ๋šซ๋ฆฐ ์กฐ๊ฑด๋ฌธ ๋•Œ๋ฌธ์ด๋‹ค.

if (row, col) in points:
    if not points[depth-1] != (row, col):
        continue
    else:
        visited[row][col] = True
        dfs(row, col, depth+1)

 

1. `(row, col) in points`:

  • ์ด ์กฐ๊ฑด์€ ํ˜„์žฌ ํƒ์ƒ‰ ์ค‘์ธ (row, col) ์ขŒํ‘œ๊ฐ€ points ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • points ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  ์ฒดํฌํฌ์ธํŠธ๋“ค์˜ ์ขŒํ‘œ๋ฅผ ์ €์žฅํ•œ ๋ฆฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
  • ์ด ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด, row์™€ col์ด ์ฒดํฌํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜๋ผ๋Š” ์˜๋ฏธ

2. `if not points[depth-1] != (row, col)`:

  • depth๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์€ ๋‹ค์Œ ๋ฐฉ๋ฌธํ•ด์•ผํ•  ์ฒดํฌํฌ์ธํŠธ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฏ€๋กœ depth-1๋กœ ์ด์ „ ๋ฐฉ๋ฌธํ•œ ์ฒดํฌํฌ์ธํŠธ๋ฅผ ํ™•์ธํ•  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ depth์˜ ์ฒดํฌํฌ์ธํŠธ ์œ„์น˜๋ฅผ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.

 

  ์žฌ์‹œ๋„) ๋ฐฉ๋ฌธํ•  ์œ„์น˜๊ฐ€ ๋‹ค์Œ ์ง€๋‚˜์•ผํ•  ์ˆœ์„œ์— ๋ถ€ํ•ฉํ•œ๋‹ค๋ฉด depth+1๋กœ dfs, ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด depth๋กœ dfs

 

- ๋ฐ˜์„ฑ : ๊ดœํ•œ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ์‹œ๋„ํ•˜์˜€๋‹ค๊ฐ€ ๊ตฌ๋ฉ ๋šซ๋ฆฐ ์กฐ๊ฑด๋ฌธ์„ ์‹คํ–‰ํ•˜์ง€ ๋ง๊ณ  ์™„ํƒ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ถ”๊ฐ€ ์กฐ๊ฑด์„ ๋‹ฌ์•„๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ•˜์ž.

 

์ž‘์„ฑ ์ฝ”๋“œ

์‹คํŒจ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

# ๊ฒฉ์ž์˜ ํฌ๊ธฐ, ๋ฐฉ๋ฌธ ํฌ์ธํŠธ ๊ฐœ์ˆ˜
n, m = map(int, input().split())

# n๊ฐœ์˜ ์ˆ˜
board = []
for i in range(n):
    board.append(list(map(int, input().split())))

# ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  m๊ฐœ์˜ ์นธ์˜ ์œ„์น˜(x, y)
points = []
for i in range(m):
    x, y = map(int, input().split())
    points.append((x-1, y-1))

dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]
visited = [[False]*n for _ in range(n)]
answer = 0

def dfs(r, c, depth):
    global answer
    if depth == m:
        answer += 1
        return

    for d in range(4):
        row = r + dr[d]
        col = c + dc[d]
        if -1 < row < n and -1 < col < n and not board[row][col] and not visited[row][col]:
            if (row, col) in points:
                if not points[depth-1] != (row, col):
                    continue
                else:
                    visited[row][col] = True
                    dfs(row, col, depth+1)
            else:
                visited[row][col] = True
                dfs(row, col, depth)
            visited[row][col] = False
    
visited[points[0][0]][points[0][1]] = True
dfs(points[0][0], points[0][1], 1)
print(answer)

 

์„ฑ๊ณต ์ฝ”๋“œ

import sys
input = sys.stdin.readline

# ๊ฒฉ์ž์˜ ํฌ๊ธฐ, ๋ฐฉ๋ฌธ ํฌ์ธํŠธ ๊ฐœ์ˆ˜
n, m = map(int, input().split())

# n๊ฐœ์˜ ์ˆ˜
board = []
for i in range(n):
    board.append(list(map(int, input().split())))

# ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  m๊ฐœ์˜ ์นธ์˜ ์œ„์น˜(x, y)
points = []
for i in range(m):
    x, y = map(int, input().split())
    points.append((x-1, y-1))

dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]
visited = [[False]*n for _ in range(n)]
answer = 0

def dfs(r, c, depth):
    global answer
    if depth == m:
        answer += 1
        return
    elif (r, c) == points[-1]:
        return

    for d in range(4):
        row = r + dr[d]
        col = c + dc[d]
        if -1 < row < n and -1 < col < n and not board[row][col] and not visited[row][col]:
            visited[row][col] = True
            if points[depth] == (row, col):
                dfs(row, col, depth+1)
            else:
                dfs(row, col, depth)
            visited[row][col] = False
    
visited[points[0][0]][points[0][1]] = True
dfs(points[0][0], points[0][1], 1)
print(answer)

 

 

 

๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ์ข‹์•„์š” ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”๐Ÿ’š

 

 

'๐Ÿ“๋ฌธ์ œ ํ’€์ด > ๐ŸงฉSofteer' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] Softeer ์ž๋™์ฐจ ํ…Œ์ŠคํŠธ - ์ •๋ ฌ  (2) 2024.08.31
[Python] ์†Œํ”„ํ‹ฐ์–ด Lv.2 ์ „๊ด‘ํŒ  (0) 2024.06.27
    '๐Ÿ“๋ฌธ์ œ ํ’€์ด/๐ŸงฉSofteer' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python] Softeer ์ž๋™์ฐจ ํ…Œ์ŠคํŠธ - ์ •๋ ฌ
    • [Python] ์†Œํ”„ํ‹ฐ์–ด Lv.2 ์ „๊ด‘ํŒ
    Hiya_
    Hiya_
    ํ•˜์–€ ์ฒœ๊ณผ ๋ฐ”๋žŒ๋งŒ ์žˆ๋‹ค๋ฉด ์–ด๋””๋“  ๊ฐˆ ์ˆ˜ ์žˆ์–ด

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