






코딩테스트 연습 - 거리두기 확인하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 코드
def solution(places):
answer = []
for i in places:
new_i = []
for j in i:
new_i.append(list(j))
# 앉아 있는 위치 리스트
sit = []
for x in range(len(new_i)):
for y in range(len(new_i[0])):
if new_i[x][y] == 'P':
sit.append((x,y))
# 앉을 수 없는 리스트
# 거리가 1인경우는 파티션을 쳐도 안되기에 바로 answer에 0을 삽입후 continue
no_sit = []
dt_ck = 0
for q in sit:
new_sit = sit[:]
new_sit.remove(q)
for w in new_sit:
dt = abs(q[0]-w[0]) + abs(q[1]-w[1])
if dt==1:
dt_ck=1
break
elif 1<dt<=2:
nono = [q,w]
nono.sort()
if nono not in no_sit:
no_sit.append(nono)
if dt_ck==1:
break
if dt_ck==1:
answer.append(0)
continue
#print(no_sit)
# 파티션 경우를 따져주며 체크해주자
# 최종으로 못 앉는 경우는 answer에 0을 넣어주고 break
ck = 0
for e in no_sit:
fir,sec = e
if fir[0]==sec[0]:
if new_i[fir[0]][fir[1]+1]=='O':
answer.append(0)
ck=1
elif fir[1]==sec[1]:
if new_i[fir[0]+1][fir[1]]=='O':
answer.append(0)
ck=1
else:
if new_i[fir[0]][sec[1]]=='O' or new_i[sec[0]][fir[1]]=='O':
answer.append(0)
ck=1
if ck==1:
break
# 최종적으로 해당 위의 경우를 다 제외한 경우는 앉을수 있는 경우 이기에 1을 넣어줌
if ck==0:
answer.append(1)
#print(new_i)
#print(answer)
return answer'코딩테스트 파이썬 > 파이썬 프로그래머스 2단계' 카테고리의 다른 글
| 테이블 해시 함수 (1) | 2023.11.23 |
|---|---|
| 미로 탈출 (2) | 2023.11.22 |
| 배달 (2) | 2023.11.17 |
| 가장 큰 정사각형 찾기 (0) | 2023.10.05 |
| 시소 짝꿍 (0) | 2023.10.04 |