Two Dots

문제 복기

문제

예시
문제 설명
입,출력 예시

위의 문제 설명에서처럼 주어진 조건은 다음과 같다.

  1. 모든 k개 점은 서로 다르다.

  2. k는 4보다 크거나 같다. =>이동한 칸의 갯수를 세서 4이상이면 된다.

  3. 모든 점의 색은 같다. =>어떤 시작점에서 컬러를 기억해서 다음 재귀함수를 호출할 때 인자로 전달하여 컬러 갯수가 같도록 해야한다!

  4. 모든 1<i<=k-1에 대해 di와 di+1은 인접하다. 또, dk와 d1도 인접해야 한다. 두 점이 인접하다는 것은 각각의 점이 들어있는 칸이 변을 공유한다는 의미이다. "인접" : 상/하/좌/우 방향으로 붙어있다!

알고리즘 생각

문제에서 주어진 조건들을 하나씩 구현해보고, 발전시켜나간다.

  • k는 4보다 크거나 같다. =>이동한 칸의 갯수를 세서 4이상이면 된다.

  • 모든 점의 색은 같다. =>어떤 시작점에서 컬러를 기억해서 다음 재귀함수를 호출할 때 인자로 전달하여 컬러 갯수가 같도록 해야한다!

  • di와 di+1은 인접하다. 또, dk와 d1도 인접해야 한다. =>"인접" : 상/하/좌/우 방향으로 붙어있다!

내가 작성한 코드 :

정답 코드 : 싸이클을 찾기만 하면되기 대문에 거리 개념은 필요가 없다. - dist 배열 삭제. 재귀함수를 계속해서 호출해서 마지막에 리턴되는 값을 가져온다. 반환형이 boolean!

하지만 위의 코드 역시 정답은 아니다. 싸이클이 존재하는지 판별하지 않기 때문이다. Solution#1. 현재 위치가 (x,y)일 때 방문했는지 확인하는 것에서 그치는 것이 아니라, 방문한 (x,y)이면 원래 좌표(x,y)에서부터 이동한 거리가 4이상인지 확인해준다.

Solution#2 . 이전에 방문한 노드를 재방문한다 = 싸이클이 생겼다는 의미! =>하지만, BFS나 DFS는 기본적으로 노드를 한번씩만 방문하기 때문에, 다음에 방문할 노드(next;nx,ny)현재 노드를 기준(x,y)으로 그 이전 노드(past;px,py)가 아니여야 한다!

=>거리 개념은 불필요하다. 거리가 얼마나 떨어져있는지는 중요하지 않기 때문이다.

Last updated

Was this helpful?