익힌 파이썬 문법들로 완성된 스도쿠판을 자동으로 생성하는 프로그램을 작성하였다.
단 한가지 어드벤티지는 대각선의 중복은 체크하지 않는점이다. 대신 사용자가 입력한 숫자 크기만큼의 스도쿠판을 생성하여야 한다.
완성된 코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
import random
nan = int(input("숫자입력 : "))
numlist = []
for i in range(0,nan):
numlist.append([])
number = random.randrange(1,nan+1)
for i in range(0,nan):
while number in numlist[0]:
number = random.randrange(1,nan+1)
numlist[0].append(number)
widcount = 0
heicount = 0
width = 0
for height in range(1,nan):
width = 0
while width < nan:
if width == 0:
heicount = 0
tempnum1 = random.randrange(1,nan+1)
while heicount < height:
if numlist[heicount][0] != tempnum1:
heicount += 1
else:
tempnum1 = random.randrange(1, nan + 1)
heicount = 0
numlist[height].append(tempnum1)
width += 1
else:
heicount = 0
widcount = 0
tempnum1 = random.randrange(1,nan+1)
while heicount < height:
if numlist[heicount][width] != tempnum1:
heicount += 1
while widcount < width:
if numlist[height][widcount] != tempnum1:
widcount += 1
else:
widcount = 0
heicount = 0
tempnum1 = random.randrange(1, nan + 1)
break
else:
for i in range(0,width):
numlist[height].pop()
width = 0
heicount = 0
break
if heicount == height:
numlist[height].append(tempnum1)
width += 1
tempnum1 = random.randrange(1,nan+1)
for j in range(0,nan):
print(numlist[j])
|
cs |
먼저 스도쿠판의 크기를 입력받는다. 입력받은 수를 이용하여 반복문을 사용, 배열의 크기를 늘린다.
그 후 난수를 생성하여 스도쿠판의 1행을 먼저 채운다.
스도쿠판이 가질 수 있는 최대숫자는 판의크기와 동일하므로 난수생성시 입력받은 숫자까지의 범위에서 난수를 생성한다.
1행을 채울 때 생성한 난수가 이미 1행에 있을 때 난수를 재 생성하여 중복되지 않게 1행을 채운다.
2행부터는 height변수와 width변수를 이용하여 현재의 행과 열을 카운트한다.
각각의 행에서 난수를 생성한 후 생성한 난수와 같은 열의 숫자와 같은 행의 숫자를 비교한다. 두번의 비교에서 중복되는 숫자가 있을경우, 현재의 난수를 제거한 후 새로운 난수를 생성하여 위의 과정을 반복한다.
모든 반복이 끝났을 때, 가로와 세로에서 중복되지 않는 스도쿠 판이 생성된다.
아래는 프로그램의 실행결과이다.
숫자입력 : 5
[5, 3, 1, 4, 2]
[2, 4, 5, 3, 1]
[3, 5, 2, 1, 4]
[1, 2, 4, 5, 3]
[4, 1, 3, 2, 5]
'Python' 카테고리의 다른 글
파이썬 (3) Thread를 이용한 경마게임 (0) | 2022.07.07 |
---|---|
파이썬 (1) 기본적인 문법 (0) | 2022.05.09 |