プログラマ距離の確認
2457 ワード
🙂 質問-距離の確認
url : https://programmers.co.kr/learn/courses/30/lessons/81302
勘定科目の問題の内容
発表を希望するJordyがKakaoに面接に来ました コロナウイルス感染を予防するためには、受験者たちは距離を置いて待つべきだが、開発職群の面接なので、以下のルールに従って待合室で距離を保つように導く。 待機室は5つあり、各待機室の大きさは5 x 5である。 距離を保つために、受験者の間でマンハッタン通り1街2以下に座らないでください。 ただし、受験者が座る位置の間がパーティションでブロックされている場合は許可されます。 (正確な画像はurlを確認してください!)
制限
placesの行長(待機室個数)=5 -placesの各行は1つの待機室構造を表す。 placesの列長(待機室縦長)=5 placesの要素はP,O,Xからなる文字列である. -places要素の長さ(待機室横長)=5 -Pは受験者が座る場所を表します。 -Oは空のテーブルを表します。 -Xはパーティションを表します。 入力された5つの待機室の大きさはいずれも5 x 5であった。 戻り値のフォーマット -5つの要素を含む1次元整数配列を返します。 -placesに含まれる5つの待合室の順序に従って、2つの距離が守られているかどうかを順番に並べます。 -各待合室にすべての受験者が距離を置いている場合、1、誰も守っていない場合は0が含まれます。
🖐解答方法
プログラマーではLEVEL 2です。 これは条件を考慮して実施すればよいという問題である。 質問条件を以下に挙げましょう。 X(=壁)は通過できません。 確認された場所と現在の標準的な場所との間の最短距離は2以下であるべきである。 ps.条件を間違えると、つい拗ねてしまい、その時から元気です。
📃 CODE
def check(inner,sx,sy):
dx = [0,0,1,-1]
dy = [-1,1,0,0]
vst = [[0 for i in range(5)] for j in range(5)]
q = []
q.append((sx,sy))
vst[sx][sy] = 1
while len(q)>0:
x = q[0][0]
y = q[0][1]
q.pop(0)
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if nx<0 or nx >=5 or ny <0 or ny >=5:
continue
if abs(nx-sx)+abs(ny-sy)>2:
continue
if vst[nx][ny]==1:
continue
if inner[nx][ny]=='X':
continue
vst[nx][ny] = 1
if inner[nx][ny]=='P':
return False
q.append((nx,ny))
return True
def solution(places):
answer = []
for place in places:
flag = True
for i in range(5):
if flag == False:
break
for j in range(5):
if flag == False:
break
if place[i][j] =='P':
flag = check(place,i,j)
if flag == False:
answer.append(0)
else:
answer.append(1)
return answer
Reference
この問題について(プログラマ距離の確認), 我々は、より多くの情報をここで見つけました https://velog.io/@choi-montaunk/프로그래머스-거리두기-확인하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol