ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] ์ž๋ฌผ์‡ ์™€ ์—ด์‡  with Python
    PS 2021. 11. 29. 20:54
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ Programmers - [์ž๋ฌผ์‡ ์™€ ์—ด์‡ ]

    ๐Ÿ’ก ์กฐ๊ฑด

    1. key๋Š” M x M(3 โ‰ค M โ‰ค 20, M์€ ์ž์—ฐ์ˆ˜) ํฌ๊ธฐ 2์ฐจ์› ๋ฐฐ์—ด
      lock์€ N x N(3 โ‰ค N โ‰ค 20, N์€ ์ž์—ฐ์ˆ˜) ํฌ๊ธฐ 2์ฐจ์› ๋ฐฐ์—ด
      M์€ ํ•ญ์ƒ N ์ดํ•˜, key์™€ lock์˜ ์›์†Œ๋Š” 0 ๋˜๋Š” 1
    2. ์ž๋ฌผ์‡ ๋Š” ํ™ˆ์ด ์žˆ์œผ๋ฉฐ, ์—ด์‡ ๋„ ๋Œ๊ธฐ๊ฐ€ ์žˆ๋‹ค. ์—ด์‡ ๋Š” ํšŒ์ „์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    3. ์ž๋ฌผ์‡  ๋ถ€๋ถ„์ด ํšŒ์ „ํ•  ์ˆ˜ ์žˆ๋Š” ์—ด์‡ ์™€ ๊ฒน์ณ์ ธ์„œ ๋ชจ๋‘ 1์ด ๋œ๋‹ค๋ฉด ์—ด ์ˆ˜ ์žˆ์œผ๋‹ˆ True, ์—ด ์ˆ˜ ์—†๋‹ค๋ฉด False๋ฅผ ๋ฐ˜ํ™˜
    4. ๊ตฌํ˜„ & ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    def turn_key(l, key):
        new_key = [item[:] for item in key]
    
        for i in range(l):
            for j in range(l):
                new_key[i][j] = key[l - (j + 1)][i]
    
        return new_key
    
    
    def check(lock, lock_l):
        for i in range(lock_l):
            for j in range(lock_l):
                if lock[i + lock_l][j + lock_l] != 1:
                    return False
        return True
    
    
    def solution(key, lock):
        key_l = len(key)
        lock_l = len(lock)
        new_lock = [[0] * (lock_l * 3) for _ in range(lock_l * 3)]
    
        new_len = len(new_lock)
    
        for i in range(lock_l):
            for j in range(lock_l):
                new_lock[i + lock_l][j + lock_l] = lock[i][j]
    
        for i in range(4):
            key = turn_key(key_l, key)
    
            for i in range(new_len - key_l):
                for j in range(new_len - key_l):
    
                    for k in range(key_l):
                        for p in range(key_l):
                            new_lock[i + k][j + p] += key[k][p]
    
                    if check(new_lock, lock_l):
                        return True
    
                    else:
                        for k in range(key_l):
                            for p in range(key_l):
                                new_lock[i + k][j + p] -= key[k][p]
    
        return False

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    print(solution([[0, 0, 0], [1, 0, 0], [0, 1, 1]], [[0, 0, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0], [1, 0, 1, 0]]))

    ์‹คํ–‰๊ฒฐ๊ณผ

    true

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. N๊ณผ M์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๊ฐ€ 20์ด๋‹ˆ, ์—ด์‡ ์˜ ์ตœ์†Œํฌ๊ธฐ์ธ 3๋งŒํผ ์ž๋ฌผ์‡ ์˜ ๊ธธ์ด์— ๊ณฑํ•ด์„œ ๋งต์„ ๋ปฅํŠ€๊ธฐ ์‹œํ‚จ๋‹ค.
      ์ด ์ž‘์—…์€ ์—ด์‡ ๋ฅผ ์›€์ง์ด๊ธฐ ํŽธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ „์ฒด ๋งต์˜ ํฌ๊ธฐ๋ฅผ ํ‚ค์šฐ๋Š” ๊ฒƒ.

    2. ๋งต์˜ ํฌ๊ธฐ๋ฅผ ์„ธ๋ฐฐ๋กœ ๋„“ํ˜”๋‹ค๋ฉด, ์›๋ž˜ ์ž๋ฌผ์‡ ๋ฅผ ๊ฐ€์šด๋ฐ ์œ„์น˜์— ์œ„์น˜์‹œํ‚จ๋‹ค.

    for i in range(lock_l):
        for j in range(lock_l):
            new_lock[i + lock_l][j + lock_l] = lock[i][j]
    1. ์—ด์‡ ๋Š” ์ด 4๋ฐฉํ–ฅ์œผ๋กœ ๋Œ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์—ด์‡ ๋ฅผ ๋ฏธ๋ฆฌ ํ•œ ๋ฒˆ ๋Œ๋ฆฌ๊ณ  ์ด๋™์‹œํ‚ค๋ฉด์„œ ์ž๋ฌผ์‡ ๊ฐ€ ์—ด๋ฆฌ๋Š”์ง€ ์ฒดํฌํ•˜๋ฉด ๋œ๋‹ค.
    key = turn_key(key_l, key)
    
    def turn_key(l, key):  
        new_key = [item[:] for item in key]
        for i in range(l):
            for j in range(l):
                new_key[i][j] = key[l - (j + 1)][i]
    
    return new_key
    1. ์—ด์‡ ๋ฅผ 0, 0 ๋ถ€ํ„ฐ new_lock ์˜ ํฌ๊ธฐ์—์„œ key์˜ ๊ธธ์ด๋งŒํผ ๋บ€ ๊ฐ’๊นŒ์ง€ ์ด๋™์‹œํ‚ค๋ฉด์„œ ๋ฐ˜๋ณต์ˆœํšŒ๋ฅผ ํ•œ๋‹ค.
      def check(lock, lock_l):  
       for i in range(lock_l):  
           for j in range(lock_l):  
               if lock[i + lock_l][j + lock_l] != 1:  
                   return False  
       return True

    ๐Ÿ’พ ๋Š๋‚€์ 

    1. ์—ด์‡ ๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์—์„œ ํ—ค๋งฌ๋ป”ํ–ˆ์ง€๋งŒ, ๋ฐ˜๋ณต ์ˆ™๋‹ฌ๋•์— ์ž˜ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    2. ์ž๋ฌผ์‡ ์˜ ์ „์ฒด ํฌ๊ธฐ๋ฅผ ํ‚ค์›Œ์„œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ N, M ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    3. ์—ญ์‹œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ & ๊ตฌํ˜„ ๋ฌธ์ œ๋Š” ์–ด๋ ต๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.