코딩테스트 연습 - 퍼즐 조각 채우기
[[1,1,0,0,1,0],[0,0,1,0,1,0],[0,1,1,0,0,1],[1,1,0,1,1,1],[1,0,0,0,1,0],[0,1,1,1,0,0]] [[1,0,0,1,1,0],[1,0,1,0,1,0],[0,1,1,0,1,1],[0,0,1,0,0,0],[1,1,0,1,1,0],[0,1,0,0,0,0]] 14 [[0,0,0],[1,1,0],[1,1,1]] [[1,1,1],[1,0,0],[0,0,0]] 0
programmers.co.kr
나의 풀이
- BFS를 사용하여 각 판에 있는 퍼즐 조각 좌표를 찾는다.
같은 퍼즐 조각(또는 빈 자리 조각)끼리 같은 리스트 안에 들어가도록 해줌
그리고 option을 사용하여 game_board는 리스트에서 0을 검사하고 table은 1을 검사한다.
- block_rotation 함수는 각 퍼즐 조각 좌표를 시계방향으로 회전시켜주는 역할을 한다.
시계방향으로 좌표 회전 공식 : y ,n-x-1
- 비교하려는 퍼즐 조각 좌표들끼리 빼주었을 때 모두 같은 값이 나오면 같은 조각으로 판단
이때 정확히 좌표들을 빼주기 위해서 bfs 함수와 block_rotation 함수에서 좌표를 sort 시켜줌
cnt를 사용하여 개수 카운트
- 처음에 같은 퍼즐을 찾으면 바로 remove 시켰는데 그렇게 하면 반복문에서 탐색하지 않는 퍼즐이 생기게 됨
그래서 remove_block에 append 시킨 후 나중에 remove_block 리스트에 없는 퍼즐 조각을 선택하도록 해줌
처음에는 블럭이 포함되는 직사각형 좌표를 찾으려하다 좌표끼리 차를 계산하여 비교하는 것으로 아이디어를 바꿔서 코드를 작성함
'study > 알고리즘' 카테고리의 다른 글
[알고리즘/프로그래머스] 소수 찾기 (0) | 2022.01.07 |
---|---|
[알고리즘/백준] Brute Force - 2309번 일곱난쟁이 / 17086번 아기상어2 (0) | 2021.12.29 |
[알고리즘/프로그래머스] 전력망을 둘로 나누기 (0) | 2021.12.23 |
[알고리즘/프로그래머스] 교점에 별 만들기 (0) | 2021.12.21 |
[알고리즘/프로그래머스] 비밀지도 (0) | 2021.12.17 |