강의로 돌아가기
hiihii

(스포주의) 체크해야할 방향?

일단 채점해서 맞긴 했는데요.
P가 나올 때마다 거리 2 이하인 ↓, →, ↓↓, →→, ↗, ↘ 방향을 체크해주는 식인데, 이렇게 했더니 테케 하나가 틀렸습니다.
혹시나해서 체크하는 방향을 ↓, →, ↓↓, →→, ↙, ↘로 바꿔주었더니 테케 전부 맞았네요;
기존 우측상단 대각선(↗) 대신, 좌측하단 대각선(↙)을 체크하는 걸로 바꾼건데, 둘 다 틀릴 게 없다고 생각하는데
왜 전엔 틀렸을까요..?

...
PXPXP
XPXPO
...

위 케이스의 경우, 어차피 두번째 줄 돌때 ↗방향 체크하면서 거리두기 안됐다는게 체크될텐데
왜 ↘는 되고 ↗는 안되는걸까요.

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def solution(places):
    answer = []
    for room in places:
        answer.append(checkAdj(room))        
    return answer


def checkAdj(room):
    dir1 = [(1,0), (0,1)] # dc, dr => 우, 하
    dir2 = [(2,0), (0,2), (1,1), (-1,1)] # dc, dr => 우우, 하하, 우하, 좌하
    pplIn2 = [ [(1,0)], [(0,1)], [(1,0),(0,1)], [(-1,0),(0,1)] ]

    for r in range(5):
        for c in range(5):
            if room[r][c]=="P":
                # 거리 1인 곳에 사람 있는지 확인
                for dc, dr in dir1:        
                    nc, nr = c+dc, r+dr
                    if nc>=5 or nr>=5:
                        continue
                    # 사람 있으면 실패
                    if room[nr][nc] == "P":
                        return 0
                # 거리 2인 곳에 사람 있는지 확인
                for d in range(4):
                    dc, dr = dir2[d]
                    nc, nr = c+dc, r+dr
                    if nc>=5 or nr>=5 or nc<0 or nr<0:
                        continue
                    if room[nr][nc] == "P":
                        for xc, xr in pplIn2[d]:
                            # 칸막이도 없으면 실패
                            if room[r+xr][c+xc]!='X':
                                return 0
    return 1

#PXPXP
#XPXPO
#POO
  • 박수경

    ↗ 방향은 이미 위의 사람을 체크할 때 확인했기 때문입니다.

    박수경―Jul 30, 2022 19:05
0 개의 답변
답변 쓰기
This input form supports markdown syntax. Please refer to 마크다운 가이드.