Python) 프로그래머스. 거리두기 확인하기
문제 링크
문제
-
개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다.
- 코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼
- 아래와 같은 규칙으로 대기실에 거리를 두고 앉도록 안내하고 있습니다.
- 대기실은 5개이며, 각 대기실은 5x5 크기입니다.
- 거리두기를 위하여 응시자들 끼리는 맨해튼 거리1가 2 이하로 앉지 말아 주세요.
- 단 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다.
- 5개의 대기실을 본 죠르디는 각 대기실에서 응시자들이 거리두기를 잘 기키고 있는지 알고 싶어졌습니다. 자리에 앉아있는 응시자들의 정보와 대기실 구조를 대기실별로 담은 2차원 문자열 배열 places가 매개변수로 주어집니다. 각 대기실별로 거리두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
제한
- places의 행 길이(대기실 개수) = 5
- places의 각 행은 하나의 대기실 구조를 나타냅니다.
- places의 열 길이(대기실 세로 길이) = 5
- places의 원소는 P,O,X로 이루어진 문자열입니다.
- places 원소의 길이(대기실 가로 길이) = 5
- P는 응시자가 앉아있는 자리를 의미합니다.
- O는 빈 테이블을 의미합니다.
- X는 파티션을 의미합니다.
- 입력으로 주어지는 5개 대기실의 크기는 모두 5x5 입니다.
- return 값 형식
- 1차원 정수 배열에 5개의 원소를 담아서 return 합니다.
- places에 담겨 있는 5개 대기실의 순서대로, 거리두기 준수 여부를 차례대로 배열에 담습니다.
- 각 대기실 별로 모든 응시자가 거리두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 담습니다.
👀 풀이
1차 시도
- 입력 배열에서 응시자들의 좌표를 따로 리스트에 저장한 뒤 응시자 한 명마다 다른 응시자들과의 거리를 구하려 했다.
- 그런데 거리는 구한다 해도 그 사이에 있는 파티션과 빈 칸의 좌표를 계산하는 것이 좀 복잡하게 느껴져서 다른 방법을 찾았다.
2차 시도
- 문제를 계속 보다 보니 맵 크기가 그렇게 크지 않아서 전체를 스캔하면 되겠다는 생각이 들었다.
- 그래서 이중 for문으로 [i][j]번째 칸이 응시자일 때 주변에 뭐가 있는지 확인한 후 분기처리를 하려 했다.
- 그런데 경우를 하나하나 쓰다 보니 코드가 굉장히 지저분해지고 몇몇 테케는 통과가 되지 않음 🥲 (이때 82점 받음)
- 그래서 질문 게시판을 찾아봤다.
3차 시도
- 생각보다 쉽게 접근해도 풀리긴 하네요..?
- 그런데 이렇게 쉽게 생각한 분이 있는 것이었다…!
- 그대로 구현하니까 100점으로 통과되었다.
- 오늘의 교훈은 문제의 조건을 최대한 단순화 시켜보자!