<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=SpiralArray%2F%EC%9E%84%EC%9D%B8%ED%83%9D</id>
	<title>SpiralArray/임인택 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=SpiralArray%2F%EC%9E%84%EC%9D%B8%ED%83%9D"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=SpiralArray/%EC%9E%84%EC%9D%B8%ED%83%9D&amp;action=history"/>
	<updated>2026-05-14T23:15:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=SpiralArray/%EC%9E%84%EC%9D%B8%ED%83%9D&amp;diff=39272&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:28, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=SpiralArray/%EC%9E%84%EC%9D%B8%ED%83%9D&amp;diff=39272&amp;oldid=prev"/>
		<updated>2021-02-07T05:28:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;각 방향별로 포인터가 이동하는 회수를 세는 방법으로 만들어봄.&lt;br /&gt;
가령 4x5 의 array라면,&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 15&lt;br /&gt;
| 16&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 20&lt;br /&gt;
| 17&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 19&lt;br /&gt;
| 18&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 10&lt;br /&gt;
| 9&lt;br /&gt;
| 8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
이런 순으로 배열이 되게 되는데, (시작점과 끝점을 제외하고) 포인터의 이동방향을 나열해보면 →→→ ↓↓↓↓↓ ←←← ↑↑↑ →→ ↓↓ ← ↑ 순으로 된다. 여기에는 간단한 규칙성이 생기는데 (첫줄의 움직임을 제외) 다음과 같은 수식으로 포현될 수 있다.&lt;br /&gt;
&lt;br /&gt;
현재 방향으로 진행횟수 = 반대 방향의 진행회수+1&lt;br /&gt;
&lt;br /&gt;
이 식으로 간단한 수열을 만들 수 있고, 이 수열로 배열의 인덱스를 바꿔가며 값을 채워나간다.&lt;br /&gt;
&lt;br /&gt;
처음에는 다른 디자인으로 접근을 했는데, 일단은 문제를 풀어보자는 취지 하에 제일 쉽게 풀릴것 같은 방법을 사용하였다.&lt;br /&gt;
----&lt;br /&gt;
 # -*- coding: UTF-8 -*&lt;br /&gt;
 import unittest&lt;br /&gt;
 &lt;br /&gt;
 def makeRotList(row, col):&lt;br /&gt;
 	rotList = []&lt;br /&gt;
 	row -= 1&lt;br /&gt;
 	col -= 1&lt;br /&gt;
 &lt;br /&gt;
 	rotList.append(row)&lt;br /&gt;
 	while True:&lt;br /&gt;
 		#cols&lt;br /&gt;
 		rotList.append(col)&lt;br /&gt;
 		if col == 1:&lt;br /&gt;
 			rotList.append(row)&lt;br /&gt;
 			break&lt;br /&gt;
 &lt;br /&gt;
 		#rows&lt;br /&gt;
 		rotList.append(row)&lt;br /&gt;
 		if row == 1:&lt;br /&gt;
 			rotList.append(col-1)	# 제일 첫줄을 (루프전에 )이미 리스트에 넣었기 때문에 1을 빼야 함&lt;br /&gt;
 			break&lt;br /&gt;
 		&lt;br /&gt;
 		row-=1&lt;br /&gt;
 		col-=1&lt;br /&gt;
 	return rotList&lt;br /&gt;
 &lt;br /&gt;
 def makeSpirialArray(rows, cols):&lt;br /&gt;
 	s = Sequence()&lt;br /&gt;
 &lt;br /&gt;
 	SpirialArray = []&lt;br /&gt;
 	for i in range(rows):&lt;br /&gt;
 		SpirialArray += [[0]*cols]&lt;br /&gt;
 &lt;br /&gt;
 	index = [0,0]&lt;br /&gt;
 	value = 0&lt;br /&gt;
 &lt;br /&gt;
 	SpirialArray[index[0]][index[1]] = value + 1&lt;br /&gt;
 	value += 1&lt;br /&gt;
 	&lt;br /&gt;
 	rotList = makeRotList(rows, cols)&lt;br /&gt;
 	&lt;br /&gt;
 	for i in rotList:&lt;br /&gt;
 		dir = s.next()&lt;br /&gt;
 		for j in range(i):&lt;br /&gt;
 			index[0] += dir[0]&lt;br /&gt;
 			index[1] += dir[1]&lt;br /&gt;
 			SpirialArray[index[0]][index[1]] = value + 1&lt;br /&gt;
 			value += 1&lt;br /&gt;
 &lt;br /&gt;
 			print index&lt;br /&gt;
 &lt;br /&gt;
 	return SpirialArray&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class Sequence:&lt;br /&gt;
 	def __init__(self):&lt;br /&gt;
 		self.sequence = [[1,0],[0,1],[-1,0],[0,-1]]&lt;br /&gt;
 		self.idx = 3&lt;br /&gt;
 	def next(self):&lt;br /&gt;
 		if self.idx == 3:&lt;br /&gt;
 			self.idx = 0&lt;br /&gt;
 		else:&lt;br /&gt;
 			self.idx += 1&lt;br /&gt;
 		return self.sequence[self.idx]&lt;br /&gt;
 &lt;br /&gt;
 class MyTest(unittest.TestCase):&lt;br /&gt;
 	def testNextSeqence(self):&lt;br /&gt;
 		s = Sequence()&lt;br /&gt;
 		self.assertEquals([1,0], s.next())&lt;br /&gt;
 		self.assertEquals([0,1], s.next())&lt;br /&gt;
 		self.assertEquals([-1,0], s.next())&lt;br /&gt;
 		self.assertEquals([0,-1], s.next())&lt;br /&gt;
 		self.assertEquals([1,0], s.next())&lt;br /&gt;
 &lt;br /&gt;
 	def testRotList(self):&lt;br /&gt;
 		expected = [5,3,5,2,4,1,3]&lt;br /&gt;
 		self.assertEquals(expected, makeRotList(6,4))&lt;br /&gt;
 		expected = [3,5,3,4,2,3,1,2]&lt;br /&gt;
 		self.assertEquals(expected, makeRotList(4,6))&lt;br /&gt;
 		expected = [2,2,2,1,1]&lt;br /&gt;
 		self.assertEquals(expected, makeRotList(3,3))&lt;br /&gt;
 		expected = [3,3,3,2,2,1,1]&lt;br /&gt;
 		self.assertEquals(expected, makeRotList(4,4))&lt;br /&gt;
 &lt;br /&gt;
 	def testArrayCreation(self):&lt;br /&gt;
 		testArr = [[0]*3]*3&lt;br /&gt;
 		expected = [[0,0,0],[0,0,0],[0,0,0]]&lt;br /&gt;
 		self.assertEquals(expected, testArr)&lt;br /&gt;
 &lt;br /&gt;
 if __name__==&amp;#039;__main__&amp;#039;:&lt;br /&gt;
 	#unittest.main(argv=(&amp;#039;&amp;#039;,&amp;#039;-v&amp;#039;))&lt;br /&gt;
 	print makeSpirialArray(3,3)&lt;br /&gt;
 	print makeSpirialArray(6,4)&lt;br /&gt;
----&lt;br /&gt;
[[문제분류]], SpiralArray&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>