hugDog
Android DevLog
hugDog
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ™Œ Hello? (162)
    • ๐Ÿงฉ์•ˆ๋“œ๋กœ์ด๋“œ (12)
      • ๊ฐœ๋… ์ •๋ฆฌ (5)
      • ๋ฒ„๊ทธ ํ•ด๊ฒฐ (4)
      • ๊ธฐํƒ€ (3)
    • ๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜ (54)
      • ๊ฐœ๋… (0)
      • ๋ฐฑ์ค€ (48)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
    • ๐Ÿ“„๊ฐœ๋ฐœ ์ผ์ง€ (0)
      • FINPO (0)
    • ๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (71)
      • C++ ์ •๋ฆฌ (49)
      • C++๊ธฐ์ดˆํ”Œ๋Ÿฌ์Šค ์—ฐ์Šต๋ฌธ์ œ (20)
      • Kotlin (2)
    • โญProject (1)
    • ๐ŸšดTIL (13)
      • Clean Code (13)
    • ๐Ÿšฉ๊ธฐํƒ€ (9)
      • ๋ชฉํ‘œ (6)
      • ์ผ์ƒ (3)
      • ๋ฌธ์„œ (0)

์ธ๊ธฐ ๊ธ€

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

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

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

Android DevLog

[Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1194๋ฒˆ: ๋‹ฌ์ด ์ฐจ์˜ค๋ฅธ๋‹ค, ๊ฐ€์ž
๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1194๋ฒˆ: ๋‹ฌ์ด ์ฐจ์˜ค๋ฅธ๋‹ค, ๊ฐ€์ž

2022. 1. 11. 18:24
728x90

๋ฌธ์ œ

 

ํ’€์ด

๋น„ํŠธ ๋งˆ์Šคํ‚น์„ ์‚ฌ์šฉํ•ด ํ’€์—ˆ๋‹ค.

์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ƒํƒœ : 0b0

ํ‚ค ์—†์Œ : 0b1

aํ‚ค : 0b10

bํ‚ค : 0b100

cํ‚ค : 0b1000

a, cํ‚ค : 0b1010

...

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋กํ–ˆ๋‹ค.

 

๋˜ํ•œ haveKey์— ๋ฏผ์‹์ด๊ฐ€ ๋ณด์œ ํ•œ ์—ด์‡  ์ •๋ณด๋ฅผ ๋น„ํŠธ ๋งˆ์Šคํ‚นํ–ˆ๋‹ค.

ํ‚ค ์—†์Œ : 0b1

aํ‚ค ๋ณด์œ  : 0b11

bํ‚ค ๋ณด์œ  : 0b101

a, bํ‚ค ๋ณด์œ  : 0b111

...

 

๋งŒ์•ฝ a, bํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ฏผ์‹์ด๊ฐ€ ์ขŒํ‘œ(x, y)์— ๋ฐฉ๋ฌธํ•˜๋ ค ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ขŒํ‘œ์— ์ด๋ฏธ a, b, cํ‚ค๋ฅผ ์†Œ์œ ํ•œ ์ฑ„๋กœ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋ฐฉ๋ฌธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

if (visited[ni][nj] | haveKey) == visited[ni][nj]: continue

 

 

์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

https://studyandwrite.tistory.com/325

 

[Python] ๋น„ํŠธ๋งˆ์Šคํฌ(Bit Mask)

1. ๋“ค์–ด๊ฐ€๋ฉด์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํŒŒ์ด์ฌ์—์„œ ๋น„ํŠธ๋งˆ์Šคํฌ ๊ธฐ๋ฒ•์„ ์ด์šฉํ•ด ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋…์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ „์—๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ์— ๋Œ€ํ•ด ๋ณต์žกํ•˜๊ณ  ํ•„์š”์—†๋‹ค(?)๊ณ  ์ƒ๊ฐํ–ˆ๋Š”

studyandwrite.tistory.com

 

์ฝ”๋“œ

import sys
from collections import deque
input = sys.stdin.readline

key = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
door = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5, 'F':6}

n, m = map(int, input().split())
graph = [list(input().rstrip()) for _ in range(n)]
visited = [[0] * m for _ in range(n)]

def condition(ni, nj):
    return ni < 0 or ni >= n or nj < 0 or nj >= m or graph[ni][nj] == '#'

def bfs(y, x):
    q = deque()
    q.append((y, x, 1, 0))
    visited[y][x] |= (1 << 0)
    dir = ((0, 1), (0, -1), (1, 0), (-1, 0))
    
    while q:
        i, j, haveKey, cnt = q.popleft()
        if graph[i][j] == '1':
            print(cnt)
            return
        
        for dy, dx in dir:
            ni, nj = i + dy, j + dx
            if condition(ni, nj):   continue
            if (visited[ni][nj] | haveKey) == visited[ni][nj]: continue
            if 'A' <= graph[ni][nj] <= 'F':
                if not (haveKey & (1 << door[graph[ni][nj]])): #ํ‚ค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
                    continue
            if 'a' <= graph[ni][nj] <= 'f':
                q.append((ni, nj, haveKey | (1 << key[graph[ni][nj]]), cnt + 1))
                visited[ni][nj] = (haveKey | (1 << key[graph[ni][nj]]))
                continue
            q.append((ni, nj, haveKey, cnt + 1))
            visited[ni][nj] = haveKey
    print(-1)
            
    
for i in range(n):
    for j in range(m):
        if graph[i][j] == '0':
            bfs(i, j)
            break

 

๋งˆ๋ฌด๋ฆฌ

๊ณจ๋“œ 1 ๋ฌธ์ œ์—ฌ์„œ ๋งŽ์ด ์ซ„์•˜๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ํ’€๋งŒ ํ–ˆ๋‹ค. (๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ์—์„œ ์‹œ๊ฐ„์„ ๊ฝค ์žก์•„๋จน๊ธด ํ–ˆ์ง€๋งŒ...)

 

๋…ธ๋ž˜๊ฐ€ ์—„์ฒญ ์ข‹๋‹ค ใ…Ž

https://www.youtube.com/watch?v=wG2lDphHVR8 

 

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ
    '๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1987๋ฒˆ: ์•ŒํŒŒ๋ฒณ
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1068๋ฒˆ: ํŠธ๋ฆฌ
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 11578๋ฒˆ: ํŒ€์› ๋ชจ์ง‘
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 17472๋ฒˆ: ๋‹ค๋ฆฌ ๋งŒ๋“ค๊ธฐ 2
    hugDog
    hugDog
    ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ ์ค‘์ธ ํ•™์ƒ์ž…๋‹ˆ๋‹ค!

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