공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 프로그래머스. 2020 카카오 recruit - 자물쇠와 열쇠 (Level 3)

inspirit941 2020. 4. 7. 18:12
반응형

https://programmers.co.kr/learn/courses/30/lessons/60059

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 방법은 카카오 공식 해설을 참고하면 된다.

https://tech.kakao.com/2019/10/02/kakao-blind-recruitment-2020-round1/

 

2020 신입 개발자 블라인드 채용 1차 코딩 테스트 문제 해설

올해에도 2020이라는 멋진 숫자와 함께, 카카오의 신입 개발자 채용을 시작했습니다! 그 여정 중 첫 단계로 1차 코딩 테스트가 지난 9월 7일 토요일 오후 2시부터 오후 7시까지 5시간 동안 진행됐는데요. 저희 준비위원들도 설렘과 긴장 속에 원활한 진행을 위해 노력했고, 무사히 1차 테스트를 마칠 수 있었습니다. 테스트에는 총 7문제가 출제됐고, 응시자는 5시간 이내에 순서와 상관없이 문제를 해결해야 […]

tech.kakao.com

해설도 해설이지만, 구현하는 게 생각보다 까다로운 문제.

key[y - start_y][x - start_x]가 필요하다는 걸 완벽히 이해한 뒤에야 문제를 풀어낼 수 있었다.

 

 

def rotate(maps):
return [list(reversed(i)) for i in zip(*maps)]
def solution(key, lock):
hole = 0
for y in range(len(lock)):
for x in range(len(lock[0])):
if lock[y][x] == 0:
hole += 1
for _ in range(4):
for start_y in range(-len(key)+1, len(lock)):
for start_x in range(-len(key)+1, len(lock[0])):
# 자물쇠와 lock 일치하는 개수 / match여부
check = 0
match = True
for y in range(start_y, start_y + len(key)):
if y < 0 or y >= len(lock):
continue
for x in range(start_x, start_x + len(key[0])):
if x < 0 or x >= len(lock[0]):
continue
# 자물쇠 돌기와 열쇠 돌기가 만나는 경우
if lock[y][x] == 1 and key[y - start_y][x - start_x] == 1:
match = False
break
# 자물쇠 돌기와 홈 구멍이 일치하는 경우
elif lock[y][x] == 0 and key[y - start_y][x - start_x] == 1:
check += 1
# 더 체크할 필요 없이 자물쇠와 열쇠가 맞지 않는 경우
if not match:
break
# 자물쇠 돌기와 홈 구멍 개수가 일치하는 경우
if match and check == hole:
return True
key = rotate(key)
return False
반응형