강의로 돌아가기
라경현

(정답, 코드 음슴) 깨달은 점을 공유합니다.

푸는 방법은 크게 두가지가 있으며 공통적으로 한가지를 신경써야만 합니다.

이 한가지를 간과해서 3시간을 고이접어 하늘로 나빌레라했습니다...

먼저 개꿀팁 하나는 모든 순환을 세야만 하는 건 아닙니다.

무슨 말이냐면 그림을 그릴 수 없어서 어쩔 수 없이 글로만 적자면 예를 들어 보겠습니다.
직사각형 두개를 한 선분끼리 붙여서 새로운 도형을 만들었다고 해 봅시다.
그럼 만들어진 방의 개수는요? 2갠가요? 3갠가요?

  • 2개인 경우 : 원본 직사각형 2개
  • 3개인 경우 : 원본 직사각형 2개 + 새로 만들어진 큰 도형

이거 2개인 경우는 그나마 괜찮은데 3개인 경우는 머리가 터집니다. 아니 제 머리 터지기 전에 문제낸 사람 머리 터트리러 가야합니다.
다행히 답은 2개인가 봅니다. 제출하니 맞았다고 하니까요.. 사실 2개 구하는것도 어렵기에 이정도로 충분합니다.
근데 좀 확실히 말해줘야 되는거 아닙니까? 이거 알려주는게 뭐 어렵다고 사람을 쓸데없이 고민시키고 말이야...

푸는 방법 1번 : 오일러 다면체 정리 f = e - v + 1

오일러 다면체 정리중 2차원 방정식인 면의 개수 = 선분의 개수 - 꼭지점의 개수 + 1 이게 있습니다.
그럼, 선분의 개수와 꼭지점 개수 세고 계산해서 반환하면 되겠군요.
이게 편합니다. 설명쓰는 저도 편하군요 가타부타 할 말이 더 없으니 ㅎ

푸는 방법 2번 : 직접 세기

사실 오일러 정리 바로 떠오른 사람은 소수일 겁니다... 안떠오르면 으찌합니까.. 직접세야죠 뭐...
처음엔 방이 생기는 조건은 간단하다고 생각했습니다. 점찍고 선을 그리면서 나아 가는데 이미 찍었던 점을 또 찍을때가 방이 생길 때니까요.
근데? 왔다갔다하는 경우나 왔던길 그대로 따라 가는 경우는요? 이것도 생각을 해봐야겠죠? 이 경우에는 방이 생기질 않으니까요
그럼 방이 생길 조건을 하나 더 고려해야겠군요. 어떤 조건일까요? 바로 왔던점 또 왔는데 새로운 선분이 그려질때입니다.
뭐 그래프 문제니까 그래프 용어로 정리해볼까요?

  1. 노드(좌표)를 순회하는데 이미 방문햇던 노드에 왔고
  2. 새로운 간선(선분)이 생길 때

가 방이 생길 조건입니다. 그럼 그래프 그려가면서 해당 사항을 세서 반환하면 되겠군요

끝? ㄴㄴ 함정 하나 있슈

근데 제출하면 틀렸대요. 제출결과를 보고서는 이거 2개짜리가 아니라 3개짜리로 세라는건가?미쳤나? 하면서 많이 헤맸지요..
근데 한가지 예시를 찾았지요 바로 대각선 이동할 때입니다.
보통 (x, y)이렇게 해서 0~7까지 +-1하면서 이동하면서 좌표를 순회하겠지요?
근데? 대각선을 크로스해서 이동하면 어떻게 될까요? 예를 들면 작은 모래시계모양을 만들때 말입니다.
그림이 없으니 문제에 있는 arrows = [6, 3, 6, 1] 라고 예를 들어봅시다.
뭐 문제 조건에 따라 방이 몇개 생기죠? 2개 생기죠? 근데? 좌표는 4개에 선분 4개니까 오일러 정리든 위의 2번 방법이든 2개가 나오나요?
안나올 겁니다. 대각선끼리의 교점을 찍지 않았으니까요...
그럼 이걸 고려하면 완전해졌습니다. arrows의 원소가 짝수면 +-2 이동하고 홀수면 +-1 이동 2번을 하든, 0.5 좌표를 도입하든 알아서 하시면 됩니다.
대각선 이동만 조심하면 되니까요

한줄요약 : 대각선 교점만 더 찍어서 (간선개수 - 노드개수 + 1)로 반환하면 끝~

화이탕~💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻💪🏻

0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.