본문 바로가기

알고리즘

[programmers] 기둥과 보 설치

 


로직

 - build_frame을 하나씩 돌면서 1(설치)일때, 0(삭제)일 때 각자 진행을 한다.

 - b==1일 때(설치)할 때 조건을 따질건데, 조건은 1) 기둥은 바닥 위에 있거나 보의 한쪽 끝 부분 위에 있거나, 또는 다른 기둥 위에 있어야 합니다.

   2) 보는 한쪽 끝 부분이 기둥 위에 있거나, 또는 양쪽 끝 부분이 다른 보와 동시에 연결되어 있어야 합니다.이다.

   그림을 보고 x, y, a를 설정해 install 함수를 만든다.

 - 설치하게 되면 (x, y, a)를 key로 두고 total = {}에 추가한다.

 - 삭제할 때는 일단 total에서 pop한 다음에 그 값이 near을 돌면서 이동된 값이 기둥이거나 보랑 만나면 그대로 pop한대로 두고,

   보나 기둥이랑 만나지않으면 없었던 일로 생각하고 total에 다시 넣는다.

 

코드

 

주의할 점

1. 원래 total = []하려했는데, pop할때 특정짓기 힘들어서 {}로 수정

 

2. near이 4방향보다 많은 이유 : install함수에서 x-1, x+1, y-1, y+1과 같이 비교해야하는 부분들이 있기 때문에

 

3. 삭제한 후 조건에 맞지 않으면 다시 total에 넣어야하는데, 이때 기존 x, y, a값으로 넣어야 한다.

 

4. near을 돌면서 xi, yi를 설정하고 a=0, a=1일 때 따로 지정해줘야한다. 한번에 a로 쓰게 되면 런타임에러가 나온다.

 

5. answer = sorted(answer)로 정렬해야한다. answer = sorted(answer, keys=lambda x:(x[0], x[1]))했는데 실패,,

'알고리즘' 카테고리의 다른 글

[programmers] 자물쇠와 열쇠  (0) 2020.09.19
[programmers] 셔틀버스  (0) 2020.09.19
[programmers] 조이스틱  (0) 2020.09.15
[programmers] 추석 트래픽  (0) 2020.09.11
[programmers] 방금 그 곡  (0) 2020.09.10