코딩테스트

[프로그래머스][KAKAO_인턴][2021] 거리두기 확인하기

pythaac 2021. 9. 5. 16:52
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

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

 

코딩테스트 연습 - 거리두기 확인하기

[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1]

programmers.co.kr

 

내가 작성한 코드

def is_find(places, i, j):
    dir_one = [(0,1),(1,0),(0,-1),(-1,0)]
    dir_two = [((-1, -1),[(-1,0),(0,-1)]),
               ((1, 1),[(1,0),(0,1)]),
               ((1,-1),[(1,0),(0,-1)]),
               ((-1,1),[(-1,0),(0,1)]),
               ((2,0),[(1,0)]),
               ((0,2),[(0,1)]),
               ((-2,0),[(-1,0)]),
               ((0,-2),[(0,-1)])]
    for d_i, d_j in dir_one:
        nw_i, nw_j = i+d_i, j+d_j
        if 0 <= nw_i < 5 and  0 <= nw_j < 5 and places[nw_i][nw_j] == 'P':
            return False
    for d, n in dir_two:
        d_i, d_j = d
        nw_i, nw_j = i + d_i, j + d_j
        if 0 <= nw_i < 5 and 0 <= nw_j < 5 and places[nw_i][nw_j] == 'P':
            for n_i, n_j in n:
                non_i, non_j = i + n_i, j + n_j
                if 0 <= non_i < 5 and 0 <= non_j < 5 and places[non_i][non_j] != 'X':
                    return False
    return True

def true_false(place):
    for i in range(5):
        for j in range(5):
            if place[i][j] == 'P' and not is_find(place, i, j):
                return 0
    return 1

def solution(places):
    answer = []
    for place in places:
        answer.append(true_false(place))

    return answer
  • 좌표
    • P 위치에 대해 필요한 X가 있는지 확인하여 bool로 반환

 

다른 사람이 작성한 코드

None

 

기억해야할 것

  • 전체 좌표를 탐색해야하므로, 특별히 좋은 방법은 없을 듯 하다