일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- DateTime
- BFS
- backjoon
- 이분탐색
- 동적 계획법
- KAKAO BLIND RECRUITMENT
- heapq
- Set
- lambda
- dfs
- 정렬
- 정규식
- Combinations
- 그리디
- 자바
- divmod
- 추석맞이 코딩챌린지
- python
- 수학
- Zip
- java
- 백준
- 파이썬
- Re
- programmers
- 다익스트라
- 프로그래머스
- 재귀함수
- 카카오
- 위클리 챌린지
Archives
- Today
- Total
상상쓰
[프로그래머스] 자물쇠와 열쇠 본문
https://programmers.co.kr/learn/courses/30/lessons/60059
뭔가 복잡하여 단순하게 계산하기 위해서 lock 을 2 * (m - 1) + n 길이의 배열로 만들어 key 와 비교를 했다.
자물쇠의 홈 부분의 개수를 N 으로 하고 키의 돌기 부분이 자물쇠의 홈 부분을 만나는 횟수를 C 로 해서 비교해서 같으면 True 를 반환하고 모든 동작을 break 한다. 자물쇠와 키의 돌기 부분이 만나는 경우는 False 인 경우로 break 후 다른 경우로 넘어간다.
def solution(key, lock):
answer = False
m, n = len(key), len(lock)
array = [[0] * (2*(m-1)+n) for i in range(2*(m-1)+n)]
N, C = 0, 0
for i in range(n):
for j in range(n):
array[m-1+i][m-1+j] = lock[i][j]
if lock[i][j] == 0:
N = N + 1
for _ in range(4):
if answer:
break
key = rotate90(key)
x, y = 0, 0
while x <= m+n-2 and y <= m+n-2:
for i in range(m):
if C < 0: break
for j in range(m):
if m-1<= x+i <= m+n-2 and m-1 <= y+j <= m+n-2:
if array[x+i][y+j] == 0 and key[i][j] == 1:
C = C + 1
else:
if array[x+i][y+j] == 1 and key[i][j] == 1:
C = -1
break
if N == C:
answer = True
break
else:
C = 0
if x < m+n-2:
x = x + 1
else:
y = y + 1
x = 0
return answer
def rotate90(key):
m = len(key)
key_ = [[0] * m for i in range(m)]
for i in range(m):
for j in range(m):
key_[j][m-i-1] = key[i][j]
return key_
print(solution([[0, 0, 0], [1, 0, 0], [0, 1, 1]], [[1, 1, 1], [1, 1, 0], [1, 0, 1]])) # True
'Coding Test' 카테고리의 다른 글
[프로그래머스] 길 찾기 게임 (0) | 2021.06.04 |
---|---|
[프로그래머스] 가장 큰 수 (0) | 2021.06.03 |
[프로그래머스] 괄호 회전하기 (0) | 2021.06.01 |
[프로그래머스] 게임 맵 최단거리 (0) | 2021.06.01 |
[프로그래머스] 무지의 먹방 라이브 (0) | 2021.06.01 |
Comments