EunJng

[PRO] 기둥과 보 설치 | Python 본문

PROBLEM/PROGRAMMERS

[PRO] 기둥과 보 설치 | Python

Eunjng 2023. 5. 2. 23:24

문제

프로그래머스 2020 카카오 코딩테스트(2020 KAKAO BLIND RECRUITMENT) 기둥과 보 설치 | lv.3

https://school.programmers.co.kr/learn/courses/30/lessons/60061?language=python3 

 

프로그래머스

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

programmers.co.kr

 

 

풀이 과정

파이썬 풀이

def solution(n, build_frame):
    answer = []

    def check(answer):
        for x, y, num in answer:
            if num:   # 보
                if [x, y-1, 0] in answer or [x+1, y-1, 0] in answer or ([x-1, y, 1] in answer and [x+1, y, 1] in answer):
                    continue
                return False

            else:   # 기둥
                if y == 0 or [x, y, 1] in answer or [x-1, y, 1] in answer or [x, y-1, 0] in answer:
                    continue
                return False
        return True


    for x, y, a, b in build_frame:
        if b:
            answer.append([x, y, a])
            if not check(answer):
                answer.remove([x, y, a])
        else:
            answer.remove([x, y, a])
            if not check(answer):
                answer.append([x, y, a])

    answer.sort()
    return answer
  • 처음에 check 함수에서 answer 내의 모든 값들이 아닌, build_frame에서 추가/삭제한 좌표에 대해서만 확인했더니 틀림
  • 함수의 인자로 x, y, a만 넘기는 것이 아니라 answer을 넘겨주어 함수 내에서 for문을 통해 모든 값들을 확인하도록 수정
    이 때, 조건 충족 시 바로 return True를 한다면 모든 값들 확인할 수 없음.
    따라서 조건 충족 시 continue를, 불충족 시 return False를 통해 모든 값 확인
    -> for문을 모두 순회하였는데 return False를 만나지 못했다면 문제 없으므로 return True
  • 설치/삭제를 한 후에 문제 없는지 확인 -> 문제 있다면 다시 삭제/추가하여 해당 작업 무시

 

'PROBLEM > PROGRAMMERS' 카테고리의 다른 글

[PRO] 숫자 게임 | Java | Python  (0) 2023.06.14
[PRO] 게임 맵 최단거리 | Java  (0) 2023.06.13
[PRO] 키패드 누르기 | Java  (0) 2023.06.12
[PRO] 여행 경로 | Python  (0) 2023.05.08
[PRO] 불량사용자 | Python  (0) 2023.04.29