プログラマ距離の確認


🙂 質問-距離の確認


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
  • 草が汚い...必ずclean codeを...