[2020카카오공채] 자물쇠와 열쇠
https://programmers.co.kr/learn/courses/30/lessons/60059
코딩테스트 연습 - 자물쇠와 열쇠 | 프로그래머스
[[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true
programmers.co.kr
lock을 3배 넓게 하는것을 생각하는게 핵심인 문제같습니다.
자물쇠는 4회전 가능하고 각 회전마다 넓어진 lock안에서 이동하며 잠금해제가 가능한지 파악합니다.
알고리즘
1. lock을 3배 넓히고 가운데에 진짜 lock을 위치시킨다.
2. key를 90도 회전 4번 하고, 각 회전마다 넓어진 lock 안에서 이동하며 잠금해제 여부 파악한다.
2-1 좌측 상단 부터 평행이동 하는 key가 가운데 진짜 lock 부분에 겹쳤을 때마다 잠금해제 여부 파악
2-2 잠금해제 여부 파악은 가운데 진짜 lock 부분이 돌기끼리 겹쳐있는지, 빈 홈이 있는지 파악하는 것.
3. 4회전 모두 끝나고 answer 리턴.
* key가 lock에 맞는 키인지 확인하는 방법은
돌기가 1이고 홈이 0이므로
돌기끼리 만나면 1+1=2, 돌기와 홈은 1+0=1, 홈과 홈은 0+0=0
이렇게 key와 lock 을 더해보면 상태를 알 수 있다.
* key를 넓어진 lock 전체를 탐색하게 하고 가운데에 겹쳤을 때마다 isUnlock() 을 사용해 잠금해제 파악하는데,
이때 진짜 lock 전체를 검사해야 key와 닿지 않은곳에 채우지 못 한 홈(0)이 있는지 확인할 수 있다.
'Algorithm & Data Structure > Kakao' 카테고리의 다른 글
[2019 카카오 블라인드] 오픈채팅방 (0) | 2020.09.11 |
---|---|
[2019 카카오 공채] 매칭 점수 (0) | 2020.04.09 |
[2019 카카오 공채] 길 찾기 게임 (0) | 2020.04.07 |
[2020카카오공채] 괄호 변환 (0) | 2020.02.04 |
[2020카카오공채] 문자열 압축 (0) | 2020.02.01 |