PS

프로그래머스. 기둥과 보 설치

tose33 2022. 1. 12. 21:35

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

 

코딩테스트 연습 - 기둥과 보 설치

5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[

programmers.co.kr

 

주어지는 작업의 양이 최대 1000이고,

배열의 크기가 최대 100이므로 보/기둥을 설치/제거 해보고 전체배열을 확인하는 방식으로 코드를 짜는게 훨씬 쉽다.

 

금방 풀 줄 알았는데 대부분 테스트케이스가 틀렸다고 나와서 한참을 고민했다.

문제는 

  • 구조물이 겹치도록 설치하는 경우와, 없는 구조물을 삭제하는 경우는 입력으로 주어지지 않습니다.

 

위 조건을 잘못 알아들어서 였다.

 

구조물이 겹쳐지도록 설치하는 경우는 주어지지 않는다고 하여 

{0,0,0} 과 {0,0,1} 이런 조건이 주어지지 않는다고 알아들었는데 

생각해보면 기둥은 {0,0}에서 위로 설치하는 것이고, 는 {0,0}에서 오른쪽으로 설치하는 것이므로

같은 지점이 주어질수도 있다.

기존에 기둥과 보 설치여부를 저장한 2차원 배열 mark[110][110]을 mark[2][110][110]으로 만들어서 

기둥과 보를 각각 다른 차원에 저장해서 해결하였다.

 

또한 boundary 문제 때문에 모든 좌표는 1씩 더해서 ( (0,0)은 (1,1)로) 계산하고 

마지막에 answer 벡터에 넣을때 원래 좌표로 되돌린후 넣어줬다.