[プログラマーLv 3.]柱と梁の取り付け(python)

9100 ワード

1.質問


問題の説明


せいげんじょうけん


にゅうしゅつりょく


I/O例


2.解法


私が考えている過程

  • インストール
  • 先回答.(append)
  • check関数で
  • がインストールされていることを確認します.
  • 回答可能であればTrue、条件を満たさない場合False Return
  • Falseが返された場合、インストールはキャンセルされます.(remove)
  • 削除
  • まず答えから削除します.(remove)
  • check関数から
  • を削除するかどうかを確認します.
  • と答えたとき、中のものが柱や梁を立てる条件(False)に合わないと、取り外したばかりの子供が取り付けられることを意味します.(append)
  • コード#コード#

    def check(answer):
        for x, y, a in answer:
            # 기둥이 가능한 경우
            # 1) 바닥 위에 있기
            # 2) 보의 한쪽 끝 부분 위에 있기
            # 3) 다른 기둥 위에 있기
            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:  # 설치 성공, 삭제 실패
                    # print("기둥one")
                    pass  # 기둥 설치 - 가능
                          # 기둥 제거 - 불가능
                else:
                    # print("기둥two")
                    return False  # 설치실패, 삭제 성공
    
            # 보가 가능한 경우
            # 1) 한쪽 끝 부분이 기둥 위에 있기
            # 2) 양쪽 끝 부분이 다른 보와 동시에 연결되어 있기
            if a == 1:
                # print(x, y, a)
                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):
                    # print("보one")
                    pass  # 보 설치 - 가능
                          # 보 삭제 - 불가능
                else:
                    # print("보two")
                    return False  # 보 설치 - 불가능
    
        return True  # 기둥이나 보 설치 - 온전하게 가능
    
    def solution(n, build_frame):
        answer = []
        for x, y, a, b in build_frame:
            if b == 1:  # 설치
                answer.append([x, y, a])  # 일단 넣고, 설치 가능하면 유지, 설치 못하는 케이스면 빼기
                if not check(answer):
                    answer.remove([x, y, a])
                # print(answer)
    
            else:  # 삭제
                answer.remove([x, y, a])
                if check(answer) is False:  # 만약, 빼도 무관하다면 remove된 상태로 유지
                                            # 만약, 빼면 절대로 안된다면 remove다시 append해주기
                    answer.append([x, y, a])
    
        return sorted(answer)