U E D R , A S I H C RSS

Programming Pearls/Column1


1. Cracking the oysters

ํŒŒ์ผ ๋‚ด์šฉ์˜ ์†ŒํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€?

1.1. A Friendly Conversation

๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—๋Š” ์†ŒํŠธ๊ฐ€ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ผญ ์ƒˆ๋กœ์šด ๋‚˜๋งŒ์˜ ์†ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๋ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•œ ์ฒœ๋งŒ๊ฐœ์ฏค ๋œ๋‹ค๊ณ  ํ•˜์ž.์ด๊ฒƒ์„ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๋ฒ„๋ธ”์†ŒํŠธ, ํ€ต์†ŒํŠธ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ํ•˜๊ธฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŽ์ด ๋“ ๋‹ค. 32bit(4byte)์˜ ์ •์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, 40๋ฉ”๊ฐ€๋ฐ”์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ์ž‘์—…์„ ํ• ๋•Œ์—, ์šฐ๋ฆฌ๊ฐ€ ์†ŒํŠธ์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์€ 1๋ฉ”๊ฐ€ ๋‚จ์ง“์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž. ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ ค์„œ๋„ ์•ˆ๋œ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•  ๊ฒƒ์ธ๊ฐ€? ์ด ๋ ˆ์ฝ”๋“œ๋“ค์€ 7์ž๋ฆฌ ์ „ํ™”๋ฒˆํ˜ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ฒƒ์ด ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

1.2. Precise Problem Statement

  • ์ž…๋ ฅ : ๋งŽ์•„ ๋ด์•ผ n๊ฐœ์˜ ์ •์ˆ˜. ๊ฐ๊ฐ์˜ n์€ ์ฒœ๋งŒ๋ณด๋‹ค ์ž‘๋‹ค. ๋˜‘๊ฐ™์€ ์ˆซ์ž๊ฐ€ ๋‘๋ฒˆ์ด์ƒ ๋‚˜์˜ค๋ฉด ์•ˆ๋œ๋‹ค. ๊ทธ ์ˆซ์ž๋ž‘ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค.
  • ์ถœ๋ ฅ : ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ˆซ์ž๋“ค
  • ์ œํ•œ : ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 1๋ฉ”๊ฐ€ ์ •๋„๋ฐ–์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ. ๋””์Šคํฌ ๊ณต๊ฐ„ ๋„‰๋„‰ํ•จ. ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ์ˆ˜๋ถ„์„ ๋„˜์œผ๋ฉด ์•ˆ๋จ. 10์ดˆ ์ •๋„๋ฉด ๊ดœ์ฐฎ์Œ.

1.3. Program Design

์ฒจ์—๋Š” ๋จธ์ง€ ์†ŒํŠธ๋ฅผ ํ–ˆ์—ˆ๋Š”๋ฐ ๋ฒ„๋ ธ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š”, ๊ฐ๊ฐ์˜ ์ˆซ์ž๋ฅผ 4byte๋กœ ํ‘œํ˜„ํ•˜๋ฉด ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ์— 250,000๊ฐœ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. 250000๊ฐœ๋ฅผ ์†ŒํŠธํ•˜๊ณ , ๋˜ 250,000๊ฐœ ์ฝ๊ณ ... ์ด๊ฑธ 40๋ฒˆ ํ•˜๋Š” ๊ฑฐ๋‹ค. ๋จธ์ง€ ์†ŒํŠธ๋Š” ์ค‘๊ฐ„ ์ž‘์—… ํŒŒ์ผ์—์˜ ์—‘์„ธ์Šค๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚˜๊ณ , ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์ž…๋ ฅ์„ 40๋ฒˆ์„ ๋ฐ›์•„์•ผ ํ•œ๋‹ค๋Š”๊ฒŒ ๋ฌธ์ œ๋‹ค. ์ด๊ฒƒ ๋‘๊ฐ€์ง€์˜ ์žฅ์ ์„ ์ž˜ ์กฐํ•ฉํ•ด์„œ ์ž…๋ ฅ์€ ํ•œ๋ฒˆ, ์ค‘๊ฐ„ ์ž‘์—… ํŒŒ์ผ์ด ์—†๊ฒŒ๋Š” ํ•  ์ˆ˜ ์—†์„๊นŒ?

1.4. Implementation Sketch

๋น„ํŠธ๋งต, ํ˜น์€ ๋น„ํŠธ ๋ฒกํ„ฐ๋ผ ๋ถˆ๋ฆฌ์šฐ๋Š” ๋ฐฉ๋ฒ•์ด ์œ ์šฉํ• ๋“ฏ ์‹ถ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งฅ์‹œ๋ฉˆ 10๋ฏธ๋งŒ์˜ ์ˆซ์ž๋ผ ํ• ๋•Œ์—, {1,2,3,5,8}์„ ํ‘œํ˜„ํ•ด ๋ณด๋ฉด, (0 1 1 1 0 1 0 0 1 1)์ด ๋œ๋‹ค. ์žˆ์œผ๋ฉด 1, ์—†์œผ๋ฉด 0์ธ ๊ฒƒ์ด๋‹ค. ํ•œ ์ˆซ์ž๋‹น 1๋น„ํŠธ๋งŒ ํ• ๋‹น์„ ํ•ด์„œ, ๊ทธ๊ฒƒ์˜ ์ธ๋ฑ์Šค๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์•ž์—์„œ๋„ ๋งํ–ˆ๋“ฏ์ด, ๋ฏธ๋‹ˆ๋ฉˆ๊ณผ ๋งฅ์‹œ๋ฉˆ์˜ ๋„ˆ๋น„๊ฐ€ ์ž‘๊ณ , ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ์—†์œผ๋ฉฐ, ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋Š” ์ธก๋ฉด์—์„œ ์ด ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋Œ€๊ฐ•์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
~cpp 
# ๋ฐฐ์—ด๊ฐ’ 0์œผ๋กœ ์…‹ํŒ…
for b in bits:
	b=0
# ์žˆ์œผ๋ฉด 1
for e in inputFile:
	bits[e]=1
# 1์ธ๊ฒƒ๋งŒ ์ถœ๋ ฅ
for b in bits:
	if b==1:
		print b

1.5. Principles

์ด๊ฒƒ์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ฮ˜(n)์ด๋‹ค. ์ด ์ฑ•ํ„ฐ๋Š” ๋ฌธ์ œ๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ถ„์„ํ•˜๋‹ค ๋ณด๋ฉด, ๊ฐ€๋” ์—„์ฒญ๋‚œ ์ด๋“์„ ๊ฐ€์ ธ๋‹ค ์ค„๋•Œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ตํ›ˆ์„ ์ฃผ๊ณ  ์žˆ๋‹ค. ๋ฌธ์ œ ์ •์˜๋Š” ๋ฌธ์ œ ํ’€์ด์˜ 90ํ”„๋กœ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์€ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋น„ํŠธ๋งต ์†ŒํŠธ๋Š” ์‹œ๊ฐ„๋„ ์ค„๊ณ , ๊ณต๊ฐ„๋„ ์ค„์–ด๋“ค์—ˆ๋”ฐ. ์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€, ๊ทธ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ์— ๋” ์ ์€ ์‹œ๊ฐ„์ด ๋“ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๋‘๊ธฐ ๋ณด๋‹ค๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ๋‘๋Š” ๊ฒƒ์ด ๋””์Šคํฌ ์•ก์„ธ์Šค ๊ฐ™์€ ์‹œ๊ฐ„ ๊ฑธ๋ฆฌ๋Š” ์ผ์„ ์ค„์ผ ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์งœ์ž. ์œ ์ง€๋ณด์ˆ˜๋„ ์‰ฝ๊ณ , ๊ฒฌ๊ณ ํ•  ๊ฒƒ์ด๋‹ค.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:03
Processing time 0.0054 sec