Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- BFS
- 2019 KAKAO BLIND RECRUITMENT
- SWEA
- 투포인터
- 2021 KAKAO BLIND RECRUITMENT
- 백트래킹
- Spring
- 프로그래머스
- 2020 카카오 인턴십
- 2020 KAKAO BLIND RECRUITMENT
- 로봇 청소기
- 스택
- 우선순위큐
- GIT
- 투 포인터
- 플로이드 와샬
- 비트마스킹
- 최소 신장 트리
- 시뮬레이션
- 파이썬
- 크루스칼
- 플로이드와샬
- 이분탐색
- 브루트포스
- 2018 KAKAO BLIND RECRUITMENT
- 다익스트라
- 구현
- 트라이
- 조합
Archives
- Today
- Total
개발조아
[프로그래머스] 자물쇠와 열쇠 파이썬 본문
728x90
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/60059
브루트포스로 해결했다.
열쇠의 칸중 최소 한개가 자물쇠에 올수 있도록 범위를 확장해서 열쇠를 올려보면 된다.
문제의 테케 1번으로 설명하면 아래와 같다.
key는 3x3이고 lock는 3x3이다.
lock에 key의 최소 한칸이 오려면 key의 크기의 -1만큼 왼쪽위로 범위를 확장하고 올려보면 된다.
위 그림처럼 3x3 lock를 -2,-2에서 2,2까지 있는 5x5범위로 확장하여 열쇠를 올려본다면 최소 하나의 열쇠칸이 자물쇠에 올라가게 된다. 이후 해당 범위에서 열쇠를 돌리면서 확인하면 된다.
이때 인덱스가 열쇠의 범위를 벗어난 칸은 그냥 지나치면 된다. 범위 밖을 나간 열쇠는 무시해도된다고 문제에 주어진다.
def solution(k, l):
global m, n, key, lock, empty_cnt
key = k
lock = l
m = len(key)
n = len(lock)
empty_cnt = 0
for row in lock:
empty_cnt += row.count(0)
for _ in range(4):
if move_key():
return True
key = rotate_key(key)
return False
def move_key():
sx = sy = 1 - m
ex = ey = n
for x in range(sx, ex):
for y in range(sy, ey):
if check_key(x, y):
return True
return False
def check_key(sx, sy):
cnt = 0
kx = -1
for x in range(sx, sx + m):
kx += 1
if x < 0:
continue
elif x >= n:
break
ky = -1
for y in range(sy, sy + m):
ky += 1
if y < 0:
continue
elif y >= n:
break
if lock[x][y] == 0 and key[kx][ky] == 1:
cnt += 1
elif lock[x][y]==key[kx][ky]:
return False
if cnt == empty_cnt:
return True
return False
def rotate_key(key):
tmp = [[0] * m for _ in range(m)]
for x in range(m):
for y in range(m):
tmp[y][m - x - 1] = key[x][y]
return tmp
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 외벽 점검 파이썬 (0) | 2021.09.03 |
---|---|
[프로그래머스] 가사 검색 파이썬 (0) | 2021.09.02 |
[프로그래머스] 광고 삽입 파이썬 (0) | 2021.08.26 |
[프로그래머스] 합승 택시 요금 파이썬 (0) | 2021.08.24 |
[프로그래머스] 위클리 챌린지 3주차 퍼즐 조각 채우기 파이썬 (0) | 2021.08.23 |
Comments