간단한 스도쿠 만들기

이 포스트에서는 간단한 스도쿠를 만드는 방법을 설명합니다.
(특정 언어로 스도쿠를 구현하는 방법이 아니라 스도쿠를 만드는 방법 자체를 설명하는 포스트입니다.)

여기서는 가로와 세로 각 9칸씩에 3칸씩 한 구역으로 나뉘는 스도쿠를 기준으로 설명합니다.

위와 같은 형태의 칸입니다. 이 칸을 맨 위의 가로줄부터 채워 봅시다.

1 2 3 4 5 6 7 8 9

다음은 그 바로 아래의 가로줄과 또 그 바로 아래의 가로줄입니다. 2번째 가로줄은 바로 위의 칸의 숫자가 7 이상일 경우 6을 뺀 값을, 아닐 경우는 3을 더한 값을 넣습니다.(문제제기에 의해 수정)
2번째 가로줄은 바로 위의 칸에서 옆으로 3칸씩 밀어서 넣습니다. 3번째 가로줄도 같은 방법입니다. (밀어넣는 방향은 일정해야 합니다.) 그 결과는 아래와 같습니다.

1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6

이와 같이 맨 위의 가로줄 3개가 모두 한 줄에 한 숫자씩 정확하게 들어감과 동시에 3×3 구역 3곳에도 역시 한 숫자씩 정확하게 들어갔습니다.

이제 나머지 6줄(총 63칸)도 채워 봅시다. 이번에는 어떻게 채워 볼까요? 채울 칸에서 3칸 위로 올라가서 그 숫자가 9면 1을 넣고, 아니면 그 숫자에서 1을 더한 값을 넣습니다.(수정)
채울 칸에서 3칸 위에서 옆으로 1칸씩 밀어서 넣습니다. (밀어넣는 방향은 일정해야 합니다.) 그 결과는 이렇게 됩니다.

1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9 1 2 3 4 5 6 7 8

이렇게 기본적인 스도쿠가 완성됐습니다.

자, 이제 여기서 숫자칸을 바꿔치기하면 더 많은 스도쿠를 만들어낼 수 있습니다. 그 방법에 대해 알아 봅시다.

먼저, 한 줄씩 바꿔치기하는 방법입니다.

4 5 6 7 8 9 1 2 3
1 2 3 4 5 6 7 8 9
7 8 9 1 2 3 4 5 6
2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9 1 2 3 4 5 6 7 8

위와 같이 한 가로줄씩 바꿔치기해도 올바르게 성립됩니다. 다만, 반드시 같은 묶음 안에서 바꿔치기해야 합니다.

4 5 6 7 9 8 1 2 3
1 2 3 4 6 5 7 8 9
7 8 9 1 3 2 4 5 6
2 3 4 5 7 6 8 9 1
5 6 7 8 1 9 2 3 4
8 9 1 2 4 3 5 6 7
3 4 5 6 8 7 9 1 2
6 7 8 9 2 1 3 4 5
9 1 2 3 5 4 6 7 8

세로줄끼리 바꿔치기해도 됩니다. 이 때도 마찬가지로 같은 묶음 안에서 바꿔치기해야 한다는 점은 변함이 없습니다.

4 5 6 7 9 8 1 2 3
1 2 3 4 6 5 7 8 9
7 8 9 1 3 2 4 5 6
3 4 5 6 8 7 9 1 2
6 7 8 9 2 1 3 4 5
9 1 2 3 5 4 6 7 8
2 3 4 5 7 6 8 9 1
5 6 7 8 1 9 2 3 4
8 9 1 2 4 3 5 6 7

이와 같이 가로줄 3줄 묶음끼리 통째로 바꿔치기할 수도 있습니다. 물론 세로줄 3줄 묶음도 바꿔치기가 됩니다.

4 5 6 7 1 8 9 2 3
9 2 3 4 6 5 7 8 1
7 8 1 9 3 2 4 5 6
3 4 5 6 8 7 1 9 2
6 7 8 1 2 9 3 4 5
1 9 2 3 5 4 6 7 8
2 3 4 5 7 6 8 1 9
5 6 7 8 9 1 2 3 4
8 1 9 2 4 3 5 6 7

숫자끼리 바꿔치기한 예입니다. 여기서는 1과 9를 서로 맞바꿨습니다.

이 외에도 좌우반전, 상하반전, 스도쿠판 회전을 통한 바꿔치기도 가능합니다.

이를 계속 반복하다 보면,

1 8 4 3 2 9 6 7 5
6 7 5 1 4 8 3 9 2
3 9 2 6 5 7 1 8 4
5 3 9 4 7 6 2 1 8
2 1 8 5 9 3 4 6 7
4 6 7 2 8 1 5 3 9
9 2 1 7 3 5 8 4 6
7 5 3 8 6 4 9 2 1
8 4 6 9 1 2 7 5 3

이와 같이 됩니다.

이렇게 만든 스도쿠는 만들기 쉽다는 장점이 있으나, 숫자의 배열이 거의 일정하게 되어 있어 답을 너무 쉽게 예측할 수 있게 되어 버린다는 단점도 있습니다.
이 방법 말고 다른 방법으로 만들면 난이도 있는 스도쿠를 만들 수 있습니다. 어쨌든 이 포스트는 참고용으로 읽어주시기 바랍니다.

“간단한 스도쿠 만들기”의 2개의 생각

  1. 이 공식을 사용할 경우
    3*3 에 중복값이 들어가는 경우가 발생할 수 있습니다.
    첫 줄에 6, 4, 3, 2, 1, 9, 7, 8, 5 가 들어갈 경우 둘째 줄은 9, 7, 6, 5, 4, 3, 1, 2, 8
    겹쳐 보면
    6, 4, 3, 2, 1, 9, 7, 8, 5
    9, 7, 6, 5, 4, 3, 1, 2, 8
    로 3*3 1칸에 중복값이 발생하는 것을 볼 수 있습니다. 따라서 첫 줄을 생성할 때도 위와 같은 문제가 발생하지 않도록 생성해야 할 것입니다.

    1. 문제제기 감사합니다.
      해당 내용 수정하였습니다.

      ‘윗줄에서 더하는 것’에서 ‘윗줄에서 3칸씩 미는 것’으로,
      ‘3줄 위에서 1씩 더하는 것’에서 ‘3줄 위에서 1칸씩 미는 것’으로 수정하였습니다.

      수정된 내용으로 재검토 결과 중복이 발생하지 않음이 확인되었습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다