Julia: 'shift!' ๋ฐ 'unshift!'์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2017๋…„ 09์›” 27์ผ  ยท  59์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

๋ฉฐ์น  ์ „ slack์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด unshift! ๋Š” ์ƒ์†๋  ์ˆ˜ ์žˆ์ง€๋งŒ IMHO๋ผ๋Š” ์ด๋ฆ„์€ ์ƒ๋‹นํžˆ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 1.0 ์ด์ „์€ ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๊ณ ์น  ๋•Œ์ธ๋ฐ ์–ด๋•Œ์š”?

prepend ๋ฅผ ์ทจํ–ˆ์œผ๋‹ˆ unshift! -> pushfront! ์™€ shift! -> popfront! ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋˜ ๋‹ค๋ฅธ ์•„์ด๋””์–ด: push/pop!(first, x, ...) ๋ฐ push/pop!(last, x, ...) .

์ด๋ก ์ ์œผ๋กœ ์ด ๊ตฌ๋ฌธ์€ pop!(min, x) ์™€ ๊ฐ™์ด ์ผ๋ฐ˜ํ™”๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  59 ๋Œ“๊ธ€

์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ์ „๋ฉด์ ์ธ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

| ์˜ค๋ž˜๋œ | ์ƒˆ๋กœ์šด |
|-----|-----|
| push! | rpush! |
| pop! | rpop! |
| unshift! | lpush! |
| shift! | lpop! |

๋˜๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ(์‹œ์ž‘/์ข…๋ฃŒ? ์ฒซ ๋ฒˆ์งธ/๋งˆ์ง€๋ง‰?) ํ‚ค์›Œ๋“œ

์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์ด ์•ฝ๊ฐ„ ๋ชจํ˜ธํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ @c42f ์˜ ์•ž/๋’ค ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ด ๋” ๋ช…ํ™•ํ• ๊นŒ์š”?

์•ž๋’ค๊ฐ€ ์ขŒ์šฐ๋ณด๋‹ค ์„ ๋ช…ํ•˜๊ฒŒ ๋ณด์ด๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์šฉ์–ด์˜ ๊ฒฝ์šฐ ๋ฒกํ„ฐ๋ฅผ ์„ธ๋กœ๋กœ ์ธ์‡„ํ•˜๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ์•„์‰ฝ์ง€๋งŒ ์•ž/๋’ค๊ฐ€ ๊ทธ๋Ÿฐ ์ ์—์„œ ๋” ์ข‹์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์•„, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ l ๋ฐ r ๋ฅผ ์ถ•์†Œ์—์„œ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์„ ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ๋ง์ž…๋‹ˆ๋‹ค.

์•ž๋’ค๊ฐ€ ์ขŒ์šฐ๋ณด๋‹ค ์„ ๋ช…ํ•˜๊ฒŒ ๋ณด์ด๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋„ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. front ๋Š” ๋” ๋‚ฎ์€ ์ง€์ˆ˜(์˜ˆ Base.front )์™€ ์—ฐ๊ด€๋˜๊ณ  back ๋Š” ๋” ๋†’์€ ์ง€์ˆ˜์™€ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฐ๊ด€์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์–‘ํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๋” ๋‚˜์€ ์•„์ด๋””์–ด: head - tail ๋ฐ first - last ๋Š” ๊ธฐ์กด ์˜๋ฏธ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ๋ช…ํ™•ํ•˜๊ฒŒ ๋œ ๋ชจํ˜ธํ•ด ๋ณด์ž…๋‹ˆ๊นŒ?

hpush! , hpop! , tpush! ๋ฐ tpop! ์€ ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์„ foldl ๋ฐ foldr ๋“ฑ์˜ ๋ฐฐ์—ด ์ˆœ์„œ์™€ ์—ฐ๊ด€์‹œํ‚ต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, l ๋ฐ r ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋, ์œ ์‚ฌํ•œ ์ด๋ฆ„์€ pushl! , popl! , pushr! ๋ฐ popr! ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋„ค ๊ฐ€์ง€ ๊ธฐ๋Šฅ์˜ ์ด๋ฆ„์„ ๋ชจ๋‘ ๋ฐ”๊พธ๋Š” ์˜ต์…˜ ์ค‘์—์„œ pushl! , popl! , pushr! ๋ฐ popr! ์ ‘๋ฏธ์‚ฌ ๋ฒ„์ „์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

push! ๋ฐ pop! ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์œ ๋ณด ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ์„  ์ˆœ์œ„ ๋Œ€๊ธฐ์—ด์— ํ‘ธ์‹œ ๋ฐ ํŒํ•‘์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ด ๊ฒฝ์šฐ "์˜ค๋ฅธ์ชฝ"๊ณผ "์™ผ์ชฝ"์ด ์—†๊ณ  ์ž์—ฐ ์ˆœ์„œ์™€ ์ตœ์†Œ/์ตœ๋Œ€ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ๊ฐ™์€ ์‚ฌ์ „๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” pop! ๋ฒ„์ „๋„ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ popr! ๋„ ๋™์‚ฌ๋กœ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

push! ๋ฐ pop! ๋Š” ์œ ์ง€๋˜๊ณ  PriorityQueue์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด pushr! ๋ฐ popr! ๋ณ„์นญ์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” shift! & unshift! ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์˜ˆ์•ฝํ•˜์‹ญ์‹œ์˜ค!

์ง€๊ธˆ๊นŒ์ง€๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ์˜ ์ œ์•ˆ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

push*! ์™€ pop*! ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ˜• ๊ฐ„์˜ ์œ ์‚ฌ์„ฑ์„ ๊ฐ•์กฐํ•˜๊ณ  ํƒญ ์™„์„ฑ์œผ๋กœ ๋ณ€ํ˜•์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (๋‚˜๋Š” r ๋ฐ l ์ ‘๋ฏธ์‚ฌ ์ œ์•ˆ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.)

-2 ~ r ๋ฐ l ์šฉ์–ด. ์ด๋ฆ„์ด ์ข€ ์ง•๊ทธ๋Ÿฝ๊ณ  4๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐจ๋ผ๋ฆฌ OP๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ shift์™€ unshift์˜ ์ด๋ฆ„๋งŒ ๋ฐ”๊พธ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋˜ํ•œ shift์™€ unshift๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ๋“ค์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„ ์ •๋„๋กœ ์ถฉ๋ถ„ํžˆ ๋„๋ฆฌ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์— ๋Œ€ํ•ด ์•„๋ฌด๋„ ์‚ฌ์šฉ

@JeffBezanson C++ ๋ฒกํ„ฐ๋Š” push_front ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์„ ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ธฐ์กด์˜ ์ด๋ฆ„์ด ๋‹ค์‹œ ์ถ”์  ํ•  ์ˆ˜์žˆ๋Š” ๊ฐ€์ • shift ๋‚ด์žฅ์— sh ์•„๋งˆ๋„, ๊ทธ๋ฆฌ๊ณ  ํŽ„์ด ์ตœ๋Œ€๋ฅผ ํฌ์ฐฉํ•˜๊ณ  ๋ฐœ๋ช… unshift (http://www.perlmonks.org /?node_id=613144) ๋‹ค๋ฅธ ์–ธ์–ด(php, javascript, ...?)๊ฐ€ ๋’ค๋ฅผ ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „๋ก€๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ ์ ˆํ•œ ์˜์–ด ๋‹จ์–ด๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค... :) ( unshift ๋Š” 1972๋…„์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋Š” OED์— ์žˆ์Šต๋‹ˆ๋‹ค.)

๋˜๋Š” pop! & push! ์˜ ๋ฌธ์„œ์—์„œ shift! & unshift! ์ ์–ด๋„ ์–ธ๊ธ‰:

help?> pop!
search: pop! popdisplay apropos deepcopy precompile __precompile__ peakflops promote_type
also see: `shift!` `unshift!` `push!`

  pop!(collection, key[, default])

  Delete and return the mapping for key if it exists in collection, otherwise return default, or
  throw an error if default is not specified. 

๋˜ ๋‹ค๋ฅธ ์•„์ด๋””์–ด: push/pop!(first, x, ...) ๋ฐ push/pop!(last, x, ...) .

์ด๋ก ์ ์œผ๋กœ ์ด ๊ตฌ๋ฌธ์€ pop!(min, x) ์™€ ๊ฐ™์ด ์ผ๋ฐ˜ํ™”๋ฉ๋‹ˆ๋‹ค.

๋˜๋Š” pop! & push! ์˜ ๋ฌธ์„œ์—์„œ shift! & unshift! ์ ์–ด๋„ ์–ธ๊ธ‰:

๊ด€๋ จ #23789

๋ฉ‹์ง„ ์•„์ด๋””์–ด, @TotalVerb!

๋˜๋Š” splice! / insert! ์™€ first ๋ฐ last ๋ฅผ ์œ ์‚ฌ ์ธ๋ฑ์Šค๋กœ ๋ณ‘ํ•ฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋˜ ๋‹ค๋ฅธ ์•„์ด๋””์–ด: push/pop!(์ฒซ ๋ฒˆ์งธ, x, ...)

์•„ ๋ญ? ์ข‹์•„์š”, ์ด๊ฒƒ์€ ์ •๋ง ์ฐฝ์˜์ ์ธ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค :-)

first ๋ฐ last ํ•จ์ˆ˜๋ฅผ ๋‚ด๋ถ€์˜ ์‹ค์ œ ์ฝ”๋“œ์™€ ๊ด€๋ จ์ด ์—†๋Š” ๊ฒƒ๋ณด๋‹ค ์ˆœ์ „ํžˆ ๊ตฌ๋ฌธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฝค ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ผ์ข…์˜ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ์ด์ƒํ•œ ์–ฝํž˜์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒํƒœ๊ณ„์—์„œ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ฒƒ์„ ์žฅ๋ คํ•ด์•ผํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌ๋ฌธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ํ™•์‹คํžˆ first ๋ฐ last ๊ฐ€๋Šฅ์„ฑ์€ ์ „ํ˜€ ์—†์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ์•„์ด๋””์–ด๊ฐ€ ๋ฉ‹์ง€๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. X[mean, :, sum] ์—์„œ์™€ ๊ฐ™์ด ์ธ๋ฑ์‹ฑ์—์„œ ์ถ•์†Œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” @mbauman ์˜ ์•„์ด๋””์–ด๋ฅผ ์ƒ๊ฐ๋‚˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ์ ์ธ ์ž‘์—…์—๋Š” ๋„ˆ๋ฌด ํ™”๋ คํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๋‚ด๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋‘์‹ญ์‹œ์˜ค. "shift"์™€ "unshift"๊ฐ€ ๊ทธ๋ ‡๋“ฏ์ด, ๊ทธ๊ฒƒ๋“ค์€ ์ƒ๋‹นํžˆ ํ‘œ์ค€์ ์ž…๋‹ˆ๋‹ค.
  2. shift! ๋ฐ unshift! ์„ popl! ๋ฐ pushl! ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  3. 2์— ์ถ”๊ฐ€ํ•˜์—ฌ pop! ๋ฐ push! ์„ popr! ๋ฐ pushr! ํ•ฉ๋‹ˆ๋‹ค.
  4. 3์— ์ถ”๊ฐ€ํ•˜์—ฌ popr! ๋ฐ pushr! ๋Œ€ํ•œ pop! ๋ฐ push! ๋ณ„์นญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฃผ๋กœ 1๊ณผ 2 ์‚ฌ์ด์— ์žˆ์ง€๋งŒ 3๊ณผ 4์—๋„ ์•ฝ๊ฐ„์˜ ํ˜ธ์†Œ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1) ๋ฐฐ์—ด์˜ ์‹œ์ž‘๊ณผ ๋์— ๋™์ผํ•œ ์ž‘์—…(ํ‘ธ์‹œ ๋˜๋Š” ํŒํ•‘)์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ตœ์†Œํ•œ ๊ด€๋ จ๋œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋งŽ์€ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. push! ๋ฐ shift! ๋Š” ์ง๊ด€์ ์ด์ง€ ์•Š์€ ์Œ์ž…๋‹ˆ๋‹ค. 2) "shift"์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด shift! ๋ผ๋Š” ๋‹จ์–ด๋Š” ๋น„ํŠธ ์ด๋™ >> ๊ณผ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3) ๋งŽ์€ Julia ์‚ฌ์šฉ์ž๋Š” ์–ด์จŒ๋“  ํŽ„/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ๊ฒฝ ์ง€์‹์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์œ„์˜ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์˜ต์…˜ 2์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด circshift! ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

Stefan์˜ ์˜ต์…˜ 2 ๋˜๋Š” 4๋Š” ๋‚˜์—๊ฒŒ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. pop ๊ฐ™์€ ์ž‘์—…์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— circshift! ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ:

| ์˜ค๋ž˜๋œ | ์ƒˆ๋กœ์šด | ๋ณ„์นญ |
|----:|----:|----:|
| push! | pushr! | push! |
| pop! | popr! | pop! |
| unshift! | pushl! | |
| shift! | popl! | |

ํŠนํžˆ push! ๋ฐ pop! ๋ฅผ ์Šคํƒ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์™ผ์ชฝ์ธ์ง€ ์—ฌ๋ถ€๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ณ„์นญ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ ์œ ํ˜น์ ์ด๋ผ๊ณ  ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

front ๋ฐ back ์‚ฌ์šฉํ•˜๋Š” Imo๋Š” left ๋ฐ right ์ถ•์•ฝํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค (์ƒ๋‹นํžˆ) ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ๋ฒกํ„ฐ๊ฐ€ ์ˆ˜์ง์ด๊ธฐ ๋•Œ๋ฌธ์—(๋”ฐ๋ผ์„œ ์œ„์ชฝ/์•„๋ž˜์ชฝ์ด์–ด์•ผ ํ•จ) ๐Ÿ™‚. ๋‹ค๋ฅธ ์˜ต์…˜์€ ์‹œ์ž‘/์ข…๋ฃŒ ๋˜๋Š” ์ฒ˜์Œ/๋งˆ์ง€๋ง‰์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ์ด ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ์˜ ๊ฐ์†Œ ์šฉ์–ด( foldl ๋ฐ foldr ) ๋ฐ ๋ฒกํ„ฐ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ [a,b,c,โ€ฆ] ์ž…๋ ฅ๋˜๊ณ  print ์ถœ๋ ฅ๋˜๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์ข‹์€ ์ ์€ ์ž˜ ์ •๋ฆฝ๋œ ํ•œ ๋ฌธ์ž ์•ฝ์–ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง„์ง€ํ•˜๊ฒŒ, ๋‚˜๋Š” ๋ฒกํ„ฐ์˜ ์–ด๋Š ์ชฝ ๋์ด ์•ž์ธ์ง€ ๋’ค์ธ์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์•ž ์ธ๋ฑ์Šค๊ฐ€ 1์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๋’ท๋ฉด์ž…๋‹ˆ๊นŒ? ์˜ˆ, ๋•Œ๋•Œ๋กœ ๋ฒกํ„ฐ๋ฅผ ์„ธ๋กœ๋กœ ์ธ์‡„ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ธ์‡„ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋‹ค๋ฅธ ๋งŽ์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ƒ์†๋œ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์ด๋ฆ„์„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

append๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ! ๊ทธ๋ฆฌ๊ณ  ์ถ”๊ฐ€! ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๊นŒ?

์ด ๋Œ€ํ™”๋Š” https://github.com/JuliaLang/julia/issues/23902#issuecomment-332615200์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉฐ ๋‹ค์‹œ https://github.com/JuliaLang/julia/issues/23902#issuecomment-332668546 ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. , ์ฆ‰ head / tail ๋˜๋Š” first / last ์šฉ์–ด? :)

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ† ๋ก ์„ ๊ธธ๊ฒŒ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์š”์ ์€ ์ƒˆ๋กœ์šด ๋‹จ์–ด๋ฅผ ๋ฐœ๋ช…ํ•˜๊ธฐ๋ณด๋‹ค ๊ธฐ์กด ๋‹จ์–ด๋ฅผ ์žฌ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ† ๋ก ์„ ๊ธธ๊ฒŒ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์š”์ ์€ ์ƒˆ๋กœ์šด ๋‹จ์–ด๋ฅผ ๋ฐœ๋ช…ํ•˜๊ธฐ๋ณด๋‹ค ๊ธฐ์กด ๋‹จ์–ด๋ฅผ ์žฌ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@phaverty ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์‘๋‹ต์€ ๊ท€ํ•˜์˜ ๋Œ“๊ธ€์— ๋Œ“๊ธ€์„ ๋‹ฌ๊ธฐ ๋ณด๋‹ค๋Š” @StefanKarpinski ๋ฅผ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์˜!

๋‚˜๋Š” popfirst! , pushfirst! , poplast! , pushlast! ๊ณผ pop! ์™€ push! ๋ฅผ ๋ณ„์นญ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ํ›„์ž.

๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๊นŒ?

์Šค์นผ๋ผ๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

"์Šค์นผ๋ผ๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค."

์•„, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€!( x::Vector{T}, y::T )

, ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ์ •๋ง๋กœ y๊ฐ€ "T๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ"์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ ํ˜• ์‹œ์Šคํ…œ์€ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํ˜• ์ง‘ํ•ฉ์„ (์•„์ง?) ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๋จธ.

(๊ตฌ์†๋ ฅ์ด ์—†๊ณ  ์œ ์ตํ•œ) ํˆฌํ‘œ๋ฅผ ํ•ฉ์‹œ๋‹ค:

  • pushr! , popr! , pushl! ๋ฐ popl! ๋Œ€ํ•ด ๐Ÿ‘ push! ๋ฐ pop! ๋ฅผ ๋ณ„์นญ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ ๋‘ ๊ฐœ
  • ๐Ÿ‘Ž ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด
  • ๐Ÿ˜• ๋‹ค๋ฅธ ์˜ต์…˜

์ด๋ชจํ‹ฐ์ฝ˜ ์„ ํƒ์€ ๋‹ค์†Œ ํŽธํ–ฅ์ ์ž…๋‹ˆ๋‹ค ;).

๊ทธ๋ฆฌ๊ณ  :+1: ๋‹น์‹ ์ด ๊ฐ€์žฅ ์ข‹์•„ํ•œ๋‹ค๋ฉด OPs ์ œ์•ˆ์— ;)

์ด ๊ธฐ๋Šฅ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด ๋Œ€ํ™”์— ์•ฝ๊ฐ„์˜ ๋…ธ์ด์ฆˆ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋จผ์ € ์‚ฌ๊ณผํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ Julia์˜ push! , pop! , shift! ๋ฐ unshift! ํ•จ์ˆ˜์˜ ์ด๋ฆ„์€ Perl, Ruby ๋ฐ JavaScript(https://en .wikipedia.org/wiki/Double-ended_queue#Operations). ๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” ์›๋ž˜ Perl์—์„œ ๋ฐฐ์› ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ด๋ฆ„์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์ง€๋งŒ shift/unshift๊ฐ€ ๊ธฐ์–ต์— ๋‚จ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ํ‘ธ์‹œ/ํŒ์ด ์ข‹์ง€ ์•Š์€ ๋ณด์™„ ์Œ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ง„์˜๋„ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์•„์ด๋””์–ด: push/pop!(first, x, ...) ๋ฐ push/pop!(last, x, ...) .

์ด ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋ ค๋ฉด enqueue! ๋ฐ dequeue! ๋ฅผ ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์›๋ž˜ ์ด๋ฆ„์— ๋Œ€ํ•ด ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋“ค์ด ๋‹จ์ง€ ํ•œ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•œ ๋‹จ์–ด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋” ๋ฉ‹์ง„ ์กฐํ•ฉ์„ ๋งŒ๋“ค๋ ค๊ณ  FIFO์˜ ๊ฒฝ์šฐ push! ๋ฐ pull! pop! , FILO์˜ ๊ฒฝ์šฐ push! ๋ฐ pop! ๋ฅผ ์ƒ๊ฐํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋์ด ์•„๋‹Œ ๋Œ€๊ธฐ์—ด์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ํ‘ธ์‹œ/ํŒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ž˜๋œ | ์ƒˆ๋กœ์šด
-------|-----
ํ‘ธ์‹œ! | ๋†“๋‹ค!
ํŒ! | ๋‹น๊ธฐ๋‹ค!
์˜ฎ๊ธฐ๋‹ค! | ํ‘ธ์‹œ!
์‰ฌ๋‹ค! | ํŒ!

ํ‘ธ์‹œ/ํŒ์„ ๋์— ๋‚จ๊ฒจ๋‘๊ณ  ํ’‹/ํ’€์„ ์‹œ์ž‘ ๋ถ€๋ถ„์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋œ ๊นจ์ง€๋„๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒํ™ฉ์ด ๋‹ค์†Œ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋Œ€์•ˆ์€ push! ๋ฐ shift! ๋ฅผ ๊ฐ๊ฐ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด append! ๋ฐ prepend! ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” dequeuing์— ๋Œ€ํ•œ ํ•ฉ๋ฆฌ์ ์ธ ๋‹จ์–ด๊ฐ€ ์—†์œผ๋ฉฐ behead ๋ฐ curtail ๊ฐ€ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์ด์—ˆ์Šต๋‹ˆ๋‹ค...

@phaverty Vector{Any} ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค: https://github.com/JuliaLang/julia/issues/23902#issuecomment -332919287

@omus shift! ๋ฅผ push! ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค.

append! ๋Š” ๋‘ ๊ฐœ์˜ ์ปฌ๋ ‰์…˜์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐ˜๋ฉด push! et. ์•Œ. ํ•˜๋‚˜์˜ ์š”์†Œ์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ IMO์—์„œ ๊ทธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ํ•ญ์ƒ ์ˆ˜์šฉํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์Šคํ‚ค | ์œ ๋‹ˆ์ฝ”๋“œ | ์œ ๋‹ˆ์ฝ”๋“œ ์ด๋ฆ„ | ๋ณ„๋ช…
---|---|---|---
ํ‘ธ์‹œ! | โ‡ค | ๋ง‰๋Œ€์— ์™ผ์ชฝ ํ™”์‚ดํ‘œ |
ํŒ! | โ†ฆ | ๋ฐ”์—์„œ ์˜ค๋ฅธ์ชฝ ํ™”์‚ดํ‘œ | ๋งต์Šคํ† 
์˜ฎ๊ธฐ๋‹ค! | โ‡ฅ | ๋ง‰๋Œ€์— ์˜ค๋ฅธ์ชฝ ํ™”์‚ดํ‘œ |
์‰ฌ๋‹ค! | โ†ค | ๋ฐ”์—์„œ ์˜ค๋ฅธ์ชฝ ํ™”์‚ดํ‘œ | ์ง€๋„์—์„œ

์œ ๋‹ˆ์ฝ”๋“œ์˜ ๋ง‰๋Œ€๋ฅผ ๋Œ€๊ธฐ์—ด๋กœ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ~๋ถˆํ–‰ํžˆ๋„ ์ด ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋Š” ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” REPL์— ๋ฉ‹์ง„ ๋ณ„์นญ์ด ์—†์Šต๋‹ˆ๋‹ค~.

์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ shift! ์— push! ๋ฌด์ƒ ํ˜ผ๋ž€ ๋ณด์ธ๋‹ค.

์†”์งํžˆ, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๊ทธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•œ๋‹ค๋ฉด ๋ถˆํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ™•์‹คํžˆ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์นœ์ ˆํ•˜๊ณ  Julia์˜ ๊ธฐ์กด ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@omus , ์˜ˆ๋ฅผ ๋“ค์–ด โ†ฆ ๋Š” \mapsto ์ž…๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์ง“๋ง์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•  ๋ง์ด ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์‹ฌ๊ฐํ•œ ์ œ์•ˆ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ‹์ง„ ํ‘ธ์‹œ/ํŒ์„ ์žƒ๊ฒŒ ๋˜์ง€๋งŒ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์— ๋Œ€ํ•ด ํ›จ์”ฌ ๋” ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค.

์˜ค๋ž˜๋œ | ์ƒˆ๋กœ์šด
-- | --
ํ‘ธ์‹œ! | ๋ผ์Šคํ‹ด!
ํŒ! | ๋งˆ์ง€๋ง‰!
์˜ฎ๊ธฐ๋‹ค! | ๋จผ์ €!
์‰ฌ๋‹ค! | ์„ ์ !

์ด๋Ÿฌํ•œ ์ œ์•ˆ์˜ ๋Œ€๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ž์œ ๋กญ๊ฒŒ ํˆฌํ‘œํ•˜์‹ญ์‹œ์˜ค. ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์กฐ์‚ฌ๋ฅผ ํ•œ ํ›„ ๋‚ด๊ฐ€ ์–ป์€ ์œ ์ผํ•œ ์ง„์ •ํ•œ ๊ฒฐ๋ก ์€ ์ปดํ“จํ„ฐ ๊ณผํ•™์ž๋“ค์ด ํ‘ธ์‹œ/ํŒ ์šฉ์–ด๋ฅผ ๋ฐ›์•„๋“ค์˜€๊ณ  ์‹œํ”„ํŠธ/์–ธ์‹œํ”„ํŠธ์˜ ์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ• ์ง€ ๋ชฐ๋ž๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ์ƒ์ˆ˜ ์ ‘๊ธฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด์— ๋Œ€ํ•œ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๊ฐ€ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํŠนํžˆ ๋‹ค์ค‘ ๋‹จ์–ด ํ•จ์ˆ˜๋Š” ๋ฆฌํŒฉํ† ๋ง์„ ์ด‰์ง„ํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ๊ถŒ์žฅ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐœ ๋Œ€์‹  4๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ๋งŒํผ์€ ์šฐ๋ฆฌ๊ฐ€ ํ˜„ ์ƒํƒœ๋ณด๋‹ค ๋” ์ž˜ํ•  ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ๋งŒํผ์€ ์šฐ๋ฆฌ๊ฐ€ ํ˜„ ์ƒํƒœ๋ณด๋‹ค ๋” ์ž˜ํ•  ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

OP์— ๋Œ€ํ•œ ์ง€์›์ด ์ƒ๋‹นํ•ด ๋ณด์ด์ฃ ? ์•„๋งˆ๋„ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ์‹œ๊ธฐ์ƒ์กฐ์ผ๊นŒ์š”? :)

์˜ˆ, OP์˜ ์ œ์•ˆ์—๋Š” 11 ์œ„ ๋ฐ 0 ์•„๋ž˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ...

๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ํŠน์ • ์ œ์•ˆ์ด ์•„๋‹ˆ๋ผ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์— ๋Œ€ํ•œ ์ง€์›์œผ๋กœ ํ•ด์„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ํ† ๋ก  ํ›„์— ์šฐ๋ฆฌ๋Š” ์ •๋ง ๋งค๋ ฅ์ ์ธ ๋Œ€์•ˆ์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

FWIW pushfront! ๋Š” ์—ฌ์ „ํžˆ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด๋ฆ„์ด๋ฉฐ ๋‚ด ์˜๊ฒฌ์œผ๋กœ๋Š” ๊ฐ€์น˜ ์žˆ๋Š” ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‚ด C++ ํŽธํ–ฅ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” pushfront! ๋ฐ popfront! ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‚˜๋Š” pushfront! / popfront! ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด #25100์—์„œ PR์„ ํ–ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด unshift! ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‹ค์ œ๋กœ unshift! ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ (a) ํ˜„์žฌ ์ƒํƒœ์ด๊ณ  (b) perl/javascript/php/perl์—์„œ ๋ชจํ˜ธํ•œ ์„ ํƒ์„ ์ƒ์†ํ•˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ์„ ๋ก€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์Œ๊ป ์ด์ฃผ์„ธ์š” ;-)

@Sacha0 ์ด #25100์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ •๋ง๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

enqueue!(::typeof(first), a, item) = unshift!(a, item)
enqueue!(::typeof(last), a, item) = push!(a, item)
dequeue!(::typeof(first), a) = shift!(a)
dequeue!(::typeof(last), a) = pop!(a)
julia> enqueue!(::typeof(first), a, item) = unshift!(a, item);

julia> enqueue!(::typeof(last), a, item) = push!(a, item);

julia> dequeue!(::typeof(first), a) = shift!(a);

julia> dequeue!(::typeof(last), a) = pop!(a);

julia> foo = [1, 2, 3]
3-element Array{Int64,1}:
 1
 2
 3

julia> enqueue!(first, foo, 0)
4-element Array{Int64,1}:
 0
 1
 2
 3

julia> dequeue!(first, foo)
0

julia> enqueue!(last, foo, 5)
4-element Array{Int64,1}:
 1
 2
 3
 5

julia> dequeue!(last, foo)
5

๋˜๋Š”:

push!(::typeof(first), a, item) = unshift!(a, item)
push!(::typeof(last), a, item) = push!(a, item)
pop!(::typeof(first), a) = shift!(a)
pop!(::typeof(last), a) = pop!(a)

first ๋˜๋Š” last ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  push! ๋ฐ pop! ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ push!(last, ...) ๋ฐ pop!(last, ...) .

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰