(Python) 프로그래머: 포스트 및 빔 설치

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

프로그램 제작자

코드 중심 개발자를 고용하십시오. 스택 기반 위치 일치. 프로그래머를 위한 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.

프로그래머.co.kr


문제 해결

이것은 구현 문제입니다.

제거하거나 삭제할 때 제대로 연결되었는지 확인할 수 있습니다.

주어진 조건을 충족하기만 하면 됩니다.

제 생각에는

충분한 시간이 주어지면 입력이 1000을 넘지 않지만 구현하는 것이 너무 어렵고 시간이 많이 걸립니다.

꽤 쉽게 고칠 수 있었지만 아직 기술이 많이 부족한 것 같아요.

코드

def check(answer):
    for x, y, a in answer:
        if a == 0: #기둥 체크
            if y == 0 or (x-1, y, 1) in answer or (x, y, 1) in answer or (x, y-1, 0) in answer:
                continue
            return False
        else: #보 체크
            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
    return True

def solution(n, build_frame):
    answer = ()
    
    for frame in build_frame:
        x, y, a, b = frame
        if b == 1: # 설치
            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))

    return sorted(answer)