� 방향별로 ��터가 ��하는 회수를 세는 방법으로 만들어봄.
ê°€ë ¹ 4x5 ì�˜ arrayë�¼ë©´,
ì�´ëŸ° 순으로 ë°°ì—´ì�´ ë�˜ê²Œ ë�˜ëŠ”ë�°, (시작ì �ê³¼ ë��ì �ì�„ ì œì™¸í•˜ê³ ) í�¬ì�¸í„°ì�˜ ì�´ë�™ë°©í–¥ì�„ 나열해보면 →→→ ↓↓↓↓↓ â†�â†�â†� ↑↑↑ →→ ↓↓ â†� ↑ 순으로 ë�œë‹¤. 여기ì—�는 간단한 규칙성ì�´ ìƒ�기는ë�° (첫줄ì�˜ 움ì§�ìž„ì�„ ì œì™¸) 다ì�Œê³¼ ê°™ì�€ 수ì‹�으로 í�¬í˜„ë� 수 있다.
ê°€ë ¹ 4x5 ì�˜ arrayë�¼ë©´,
| 1 | 2 | 3 | 4 |
| 14 | 15 | 16 | 5 |
| 13 | 20 | 17 | 6 |
| 12 | 19 | 18 | 7 |
| 11 | 10 | 9 | 8 |
ì�´ëŸ° 순으로 ë°°ì—´ì�´ ë�˜ê²Œ ë�˜ëŠ”ë�°, (시작ì �ê³¼ ë��ì �ì�„ ì œì™¸í•˜ê³ ) í�¬ì�¸í„°ì�˜ ì�´ë�™ë°©í–¥ì�„ 나열해보면 →→→ ↓↓↓↓↓ â†�â†�â†� ↑↑↑ →→ ↓↓ â†� ↑ 순으로 ë�œë‹¤. 여기ì—�는 간단한 규칙성ì�´ ìƒ�기는ë�° (첫줄ì�˜ 움ì§�ìž„ì�„ ì œì™¸) 다ì�Œê³¼ ê°™ì�€ 수ì‹�으로 í�¬í˜„ë� 수 있다.
현재 방향으로 진행횟수 = 반대 방향� 진행회수+1
ì�´ ì‹�으로 간단한 수열ì�„ 만들 수 ìžˆê³ , ì�´ 수열로 ë°°ì—´ì�˜ ì�¸ë�±ìŠ¤ë¥¼ 바꿔가며 ê°’ì�„ 채워나간다.
처ì�Œì—�는 다른 ë””ìž�ì�¸ìœ¼ë¡œ ì ‘ê·¼ì�„ 했는ë�°, ì�¼ë‹¨ì�€ ë¬¸ì œë¥¼ 풀어보ìž�는 취지 하ì—� ì œì�¼ 쉽게 풀릴것 ê°™ì�€ 방법ì�„ 사용하였다.
~cpp
# -*- coding: UTF-8 -*
import unittest
def makeRotList(row, col):
rotList = []
row -= 1
col -= 1
rotList.append(row)
while True:
#cols
rotList.append(col)
if col == 1:
rotList.append(row)
break
#rows
rotList.append(row)
if row == 1:
rotList.append(col-1) # ì œì�¼ 첫줄ì�„ (ë£¨í”„ì „ì—� )ì�´ë¯¸ 리스트ì—� 넣었기 때문ì—� 1ì�„ 빼야 함
break
row-=1
col-=1
return rotList
def makeSpirialArray(rows, cols):
s = Sequence()
SpirialArray = []
for i in range(rows):
SpirialArray += [[0]*cols]
index = [0,0]
value = 0
SpirialArray[index[0]][index[1]] = value + 1
value += 1
rotList = makeRotList(rows, cols)
for i in rotList:
dir = s.next()
for j in range(i):
index[0] += dir[0]
index[1] += dir[1]
SpirialArray[index[0]][index[1]] = value + 1
value += 1
print index
return SpirialArray
class Sequence:
def __init__(self):
self.sequence = [[1,0],[0,1],[-1,0],[0,-1]]
self.idx = 3
def next(self):
if self.idx == 3:
self.idx = 0
else:
self.idx += 1
return self.sequence[self.idx]
class MyTest(unittest.TestCase):
def testNextSeqence(self):
s = Sequence()
self.assertEquals([1,0], s.next())
self.assertEquals([0,1], s.next())
self.assertEquals([-1,0], s.next())
self.assertEquals([0,-1], s.next())
self.assertEquals([1,0], s.next())
def testRotList(self):
expected = [5,3,5,2,4,1,3]
self.assertEquals(expected, makeRotList(6,4))
expected = [3,5,3,4,2,3,1,2]
self.assertEquals(expected, makeRotList(4,6))
expected = [2,2,2,1,1]
self.assertEquals(expected, makeRotList(3,3))
expected = [3,3,3,2,2,1,1]
self.assertEquals(expected, makeRotList(4,4))
def testArrayCreation(self):
testArr = [[0]*3]*3
expected = [[0,0,0],[0,0,0],[0,0,0]]
self.assertEquals(expected, testArr)
if __name__=='__main__':
#unittest.main(argv=('','-v'))
print makeSpirialArray(3,3)
print makeSpirialArray(6,4)










