[パートナー]実装、柱と梁の設定
Q12. ビーム取り付け
🐣質問する
ジョルディは、柱と梁を使って壁面構造を自動的に構築するロボットをシミュレートするプログラムを作成したいと思っています.
このプログラムでは、2 D仮想壁面に柱と梁を使用して、柱とビューの長さが1のセグメントとして表されるフレーム構造をインストールできます.次のルールがあります.
2 D配列build frameにパラメータが付与されている場合、壁面サイズn、柱、梁をインストールまたは削除する操作を含み、すべてのコマンドを実行した後に構造の状態に戻ります.
プログラマリンク|https://programmers.co.kr/learn/courses/30/lessons/60061
🐥に答える
作業する構造物をリストに保存し、条件に従って最終リストを並べ替えて出力すればよい.柱や梁を取り付けたり削除したりする操作を1つずつ取り出し、追加やイジェクトの有無を判断します.
構造が機能するかどうかを判断するために、個別の関数を定義します.
:柱であれば、柱作業のすべての条件を満たさなければ失敗し、一つ満たされれば本物に戻ります.もしあなたが見たら、もしあなたがすべての保証仕事が成立した条件を満たさなければ、あなたは失敗して、1つを満たすだけで、あなたは本当に戻ります.
ビルドフレームから構造物操作情報を1つずつ抽出し,各操作の可能性を判断し,操作情報リストを更新する.
:インストール後、情報を追加し、操作性を確認します.仕事ができなければ、popを減らします.逆に、削除すると、メッセージがポップアップされ、操作性がチェックされます.仕事ができない場合は、追加して再追加します.
🐓コード#コード#
def checking(result):
for build in result:
x, y, a = build # 가로, 세로, 구조물
# 기둥
if a==0:
# 바닥 위에 있지 않고, 보의 한쪽 끝 부분 위에 있지도 않고, 다른 기둥 위에도 없을 때
if y!=0 and [x-1, y, 1] not in result and [x,y,1] not in result and [x,y-1, 0] not in result:
return False
# 보
elif a==1:
# 어느 한 쪽 끝 부분도 기둥 위에 있지 않고, 양쪽 끝 부분이 다른 보와 연결되어 있지도 않을 때
if [x,y-1,0] not in result and [x+1,y-1,0] not in result and not ([x-1,y,1] in result and [x+1,y,1] in result):
return False
return True
def solution(n, build_frame):
result = [] # 설치할 구조물
for frame in build_frame:
# x, y : 기둥과 보의 교차점 좌표 [가로 좌표, 세로 좌표]
# a : 구조물의 종류 (0은 기둥, 1은 보)
# b : 설치 or 삭제 (0은 삭제, 1은 설치)
x, y, a, b = frame
# 설치
if b==1:
result.append([x,y,a])
# 설치할 수 없으면 다시 삭제
if not checking(result):
result.pop()
# 삭제
elif [x,y,a] in result:
result.pop(result.index([x,y,a]))
# 삭제할 수 없으면 다시 추가
if not checking(result):
result.append([x,y,a])
# 1. x좌표 기준으로 오름차순
# 2. x좌표가 같을 경우 y좌표 기준으로 오름차순
# 3. x,y좌표가 모두 같은 경우 기둥이 보보다 앞에 오도록. (기둥은 0, 보는 1이므로 오름차순)
return sorted(result, key=lambda x:(x[0],x[1],x[2]))
⭐2022.04.06
勉強しているうちに、解くときにリストを使うとは思わなかったので、ずっとうろうろしていました.Python List万歳~~
Reference
この問題について([パートナー]実装、柱と梁の設定), 我々は、より多くの情報をここで見つけました https://velog.io/@thguss/코테-스터디-구현-기둥과-보-설치テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol