728x90
ㅋ안녕하세요 세기무민입니다.
이번에 풀어볼 문제는 2020년도 카카오 블라인트 문제 중 하나인 자물쇠와 열쇠 문제입니다.
문제 설명
입출력 예시
문제 풀이
흠.... 개인적으로 일단 이번 문제에서 포인트는 배열 회전하는 것이라고 생각한다.
파이썬에서 배열 회전에 사용되는 내장 함수 중 Zip이라고 있는데 이걸 사용하여
0 / 90 / 180 / 270도 회전하여 한번씩 key를 넣어보면 되는 문제이다.
아래의 그림으로 좀더 쉽게 설명해보면
간단한 예시로 Lock과 Key의 값은 위와 같고 0도부터 하나씩 Lock에 Key를 넣어줍니다.
넣었을 때 Lock의 모든 값이 1이라면 True를 반환해주면 되고
0, 90, 180, 270도 회전하여 동일하게 하나씩 탐색했음에도 불구하고 모든값이 1인 경우가 없다면 False!
코드
import numpy as np
def rotate_key(keys):
rotated = np.array(list(zip(*keys[::-1])))
return rotated
def solution(key, lock):
key_num = len(key)
lock_num = len(lock)
arrays = [[0] * (key_num * lock_num) for i in range(key_num * lock_num)]
for i in range(lock_num):
for j in range(lock_num):
arrays[key_num+i][key_num+j] = lock[i][j]
key_rotate = key
for i in range(4):
key_rotate = rotate_key(key_rotate)
for j in range(key_num + lock_num):
for z in range(key_num + lock_num):
key_chk = 0
for a in range(key_num):
for b in range(key_num):
arrays[j+a][z+b] += key_rotate[a][b]
for a in range(lock_num):
for b in range(lock_num):
if arrays[key_num+a][key_num+b] != 1:
key_chk += 1
if key_chk == 0:
return True
for a in range(key_num):
for b in range(key_num):
arrays[j+a][z+b] -= key_rotate[a][b]
return False
요약정리를 하자면 아래와 같다.
1. Rotate_Key(zip)를 이용하여 key값을 90도씩 회전을 한다.
2. 회전한 뒤 해당 Lock에 Key를 넣어본 뒤 모든 값이 1인 경우라면 True,
그렇지 않은 경우라면 기존 Lock으로 원복해주면서 하나씩 전체탐색을 진행한다.
결과 및 GitHub
[GITHUB]
최근에 코딩테스트를 봤었는데....
처참한 나의 실력을 보면서 좀 더 열심히 코테 준비해야겠다는 생각이 들었네요...
준비를 별로 안하고 시험 본 나의 잘못도 있지만,
뭔가 직장다닌다고 맨날 코테 공부를 안했던 나의 무지함도 컸던거 같네요..
무튼 다음에는 더 유익한 정보로 찾아오겠습니다.
728x90
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 덧셈식 출력하기 (1) | 2024.12.08 |
---|---|
프로그래머스 : 코딩 기초 트레이닝 > 문자열 출력하기 풀이 (0) | 2024.11.11 |
프로그래머스 비밀지도 문제 풀이 - [세무민의 코딩일기] (0) | 2022.02.28 |
프로그래머스 키패드 누르기 문제풀이- [세무민의 코딩일기] (0) | 2022.02.20 |
[세무민의 코딩일기] 프로그래머스 : 우유와 요거트가 담긴 장바구니 문제 풀이 (0) | 2022.01.07 |