본문 바로가기
알고리즘 & 자료구조/Programmers

[프로그래머스] - 거리두기 확인하기 w/ Python

by Zenu 2024. 4. 17.

 

 

프로그래머스

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

programmers.co.kr

 

 


 

 

 

 

 

 


 

 

 

BFS 탐색과 값을 저장한 countArr을 통해 문제를 해결했다:

1. 모든 곳을 확인한다고 가정했을때 그 타일이 "P"값이라면?

2. 들어가서 주위에 있는 모든 칸 (위, 아래, 옆들)을 확인해서:

- 같은 "P"라면 리턴

- "O"라면 countArr에 그 위치에서 + 1

3. 만약 "O"를 찾았는데 그 칸의 위치가 2 이상이라면 거리두기 실패로 False 리턴

4. 만약 다 탐색해서 올바른 자리에 있다면 "True'리턴

 

 

dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]

def search(board):
    countArr = [[0] * 5 for _ in range(5)]
    for x in range(5):
        for y in range(5):
            if board[x][y] == "P":
                for i in range(4):
                    ux = dx[i] + x
                    uy = dy[i] + y
                    if 0 <= ux < 5 and 0 <= uy < 5:
                        if board[ux][uy] == "P": return False
                        if board[ux][uy] == "O":
                            countArr[ux][uy] += 1
                            if countArr[ux][uy] > 1:
                                return False
    return True


def solution(places):
    answer = []

    for board in places:
        answer.append(1) if search(board) else answer.append(0)

    return answer

 

 

반응형