curve4403   3년 전

안녕하세요, 우선 제 질문글을 읽어주셔서 감사합니다. ( __)

다름이 아니라.. 제 경우에는 아래와 같은 방식으로 문제를 해결해나갔고, 모든 예제가 결과에 맞게 잘 나와서 기쁜 마음으로 채점을 한 순간

'틀렸습니다'가 절 맞아주어... 당분간 다시 PS는 쳐다도 보기 싫게 만들어주었습니다...

질문 게시판을 다 뒤져봐도 추가적으로 얻을 수 있는 반례가 보이지도 않고, 제가 혼자서 테스트 할 때 사용한 반례에 대해선 잘 나와주어서.. 이렇게 남겨두긴 너무나 아쉬워 질문 글을 작성합니다. ㅠㅠ

코드 흐름은 다음과 같습니다.

1. Input data로, 스티커 하나를 입력받을 때마다 attachAllStickers를 호출해 회전하며, DFS를 이용해 해당 스티커의 회전 상태에서 다른 스티커/노트북과 안 겹치게 붙일 수 있는 위치를 탐색합니다.

2. 해당 스티커의 회전 상태에서, DFS로 탐색한 노트북의 위치에 스티커를 붙일 수 있는지 판단하기 위해 isAttachable을 호출합니다.

3. 만약 붙일 수 있다면, 109 라인의 if 분기 내에서 최 상단, 좌측에 해당하는지 판단합니다. 이 때 판단을 위해 이전 스티커 회전 상태의 노트북 부착 위치를 저장하고 있는 tmpStickerPoints를 비교 대상으로 사용합니다. 

4. 만약 이전 스티커 회전 상태의 노트북 부착 위치보다 더 상단, 좌측에 해당하는 경우 tmpStickerPoints를 현재 회전 상태 스티커의 노트북 부착 위치로 갱신합니다. 

5. 3, 4 조건에 해당하지 않고 회전 가능하다면, 스티커를 회전합니다. 

6. 모든 회전 상태의 스티커에 대해 노트북 부착 여부 판단이 완료됐다면, (153 라인) 현재 스티커가 노트북의 최 상단, 좌측에 위치할 수 있는 회전 상태에서의 위치 값을 가지고 있는 tmpStickerPoints를 이용해 노트북에 스티커를 붙입니다.

7. main으로 돌아와, 다른 스티커를 입력받고 1부터 반복합니다. 

위 과정 혹은 코드에서 제가 놓친 부분이 있을까요..? (아니, 무조건 있을테죠.. 어디에 있는 걸까요..ㅠㅠ)


aftersnow   3년 전

스티커의 회전에도 우선 순위가 있습니다.

0, 90, 180, 270 순으로 스티커를 회전하고 현재 상태의 스티커가 붙일 수 있는 스티커라면 

더이상 회전하지 않고 행과 열의 우선 순위를 고려하여 붙여야 합니다~

댓글을 작성하려면 로그인해야 합니다.