세용용용용 2023. 11. 21. 17:00

코딩테스트 연습 - 거리두기 확인하기 | 프로그래머스 스쿨 (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