ํ—ˆ๊น…ํŽ˜์ด์Šค, ๋งค๊ฐœ๋ณ€์ˆ˜ 135M์— ๋ถˆ๊ณผํ•œ ‘์Šค๋ชฐLM’ ์ถœ์‹œ (๋งํฌ)

๊ธฐ์‚ฌ ๋‚ด์šฉ ์š”์•ฝ
 ๋ฒค์ฒ˜๋น„ํŠธ๋Š” 16์ผ(ํ˜„์ง€์‹œ๊ฐ„) ํ—ˆ๊น…ํŽ˜์ด์Šค๊ฐ€ ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ ๋„ ์žฅ์น˜์—์„œ ๋กœ์ปฌ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์˜จ๋””๋ฐ”์ด์Šค ์ธ๊ณต์ง€๋Šฅ(AI)์šฉ ์˜คํ”ˆ ์†Œ์Šค sLM ‘์Šค๋ชฐLM(SmolLM)’์„ ๊ณต๊ฐœํ–ˆ๋‹ค๊ณ  ๋ณด๋„ํ–ˆ๋‹ค.
 ์ด์— ๋”ฐ๋ฅด๋ฉด ์Šค๋ชฐLM์€ ํ…์ŠคํŠธ ์ƒ์„ฑ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋œ ์†Œํ˜• ๋ชจ๋ธ๋กœ, 3๊ฐ€์ง€ ๋ฒ„์ „์„ ์ถœ์‹œํ–ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ฐ๊ฐ 1์–ต3500๋งŒ๊ฐœ(135M), 3์–ต6000๋งŒ๊ฐœ(360M), 17์–ต๊ฐœ(1.7B)๋กœ ํ˜„์žฌ ๊ณต๊ฐœ๋œ sLM ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ทœ๋ชจ๋‹ค.
 ํ—ˆ๊น… ํŽ˜์ด์Šค๋Š” ๋ฐ์ดํ„ฐ ํ๋ ˆ์ด์…˜๋ถ€ํ„ฐ ํ›ˆ๋ จ ๋‹จ๊ณ„์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์ „์ฒด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜คํ”ˆ ์†Œ์Šค๋กœ ๋งŒ๋“ค์–ด ์ฐจ๋ณ„ํ™”ํ–ˆ๋‹ค๊ณ  ๋ฐํ˜”๋‹ค. ์„ฑ๋Šฅ ๋ฉด์—์„œ๋„ ํฐ ๋ชจ๋ธ์— ๋’ค์ง€์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค. 

 

ํ•ต์‹ฌ ์šฉ์–ด
  • sLM(small Language Model)์ด๋ž€?
    • ์†Œํ˜•์–ธ์–ด๋ชจ๋ธ๋กœ ๋Œ€๊ทœ๋ชจ์–ธ์–ด๋ชจ๋ธ์— ๋น„ํ•ด ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์–ธ์–ด ๋ชจ๋ธ์„ ์˜๋ฏธ
    • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 1,000์–ต ๊ฐœ ๋ฏธ๋งŒ
  • sLM์˜ ์žฅ์ 
    • ๋น„์šฉ ํšจ์œจ์„ฑ : ์ €๋ ดํ•˜๊ณ  ์ ์€ ์ปดํ“จํŒ… ์ž์›์ด ํ•„์š”
    • ํŠน์ • ๋„๋ฉ”์ธ์ด๋‚˜ ์ž‘์—…์— ๋งž๊ฒŒ ๋ฏธ์„ธ์กฐ์ •(fine-tuning)ํ•˜๊ธฐ ์šฉ์ด
    • ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋‚˜ ์—ฃ์ง€ ๋””๋ฐ”์ด์Šค์— ๋ฐฐํฌํ•˜๊ธฐ์— ์ ํ•ฉ
    • ๋ฐ์ดํ„ฐ ๋ณด์•ˆ๊ณผ ํ”„๋ผ์ด๋ฒ„์Šค ๋ณดํ˜ธ ์ธก๋ฉด : ์กฐ์ง ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์Šตํ•˜๋ฏ€๋กœ ์ •๋ณด ์œ ์ถœ ์ตœ์†Œํ™”

 

โ€ป Reference โ€ป

https://www.woongjin.co.kr/customer/blogView.do?no=16&category2=10&keyword= (๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ฅธ ๋ชจ๋ธ ๊ตฌ๋ถ„)

https://blog.kakaocloud.com/80 (sLM์˜ ์žฅ์  ๋ฐ ํ™œ์šฉ๋ถ„์•ผ)

https://www.aitimes.com/news/articleView.html?idxno=161648 (SmollLM ๊ด€๋ จ ๊ธฐ์‚ฌ)


๊ด€์‹ฌ์ด ๋œจ๊ฑฐ์šด ๋ถ„์•ผ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ธ๊ณผ ํŠธ๋ Œ๋“œ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์˜ ๊ธฐ์—…์—์„œ ์ƒˆ๋กœ์šด ๋ชจ๋ธ๊ณผ ๊ธฐ์ˆ ๋“ค์ด ์ถœ์‹œ๋˜๊ณ  ์žˆ๋Š”๋ฐ ์–ด๋–ค ๊ฒƒ๋“ค์ด ์ถœ์‹œ๋˜์—ˆ๊ณ  ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์žˆ๋Š”์ง€๋ฅผ ์ฐพ์•„๋ณด๋ฉด์„œ ํŠธ๋ Œ๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€์•ผ๊ฒ ๋‹ค.

'IT ๊ธฐ์‚ฌ ์Šคํฌ๋žฉ ๐Ÿ“ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[IT ๊ธฐ์‚ฌ] ์•„๋งˆ์กด, ๋ช‡๋ถ„ ๋งŒ์— ํ”„๋กฌํ”„ํŠธ๋กœ ๊ธฐ์—…์šฉ ์•ฑ ์ƒ์„ฑํ•˜๋Š” โ€˜์•ฑ ์ŠคํŠœ๋””์˜คโ€™ ๊ณต๊ฐœ  (0) 2024.07.15
[IT ๊ธฐ์‚ฌ] ๋ฉ”ํƒ€, 1๋ถ„ ๋งŒ์— 3D ์—์…‹ ์ƒ์„ฑํ•˜๋Š” โ€˜๋ฉ”ํƒ€ 3D ์  โ€™ ๊ณต๊ฐœ  (0) 2024.07.04
[IT ๊ธฐ์‚ฌ] "์š”์•ฝ, ์บ˜๋ฆฐ๋” ๊ด€๋ฆฌ, ํ™”์ƒํšŒ์˜๊นŒ์ง€ ๋งก๊ธด๋‹ค" ์—…๋ฌด ๊ตฌ์„๊ตฌ์„ ์ƒ์‚ฐ์„ฑ ๋†’์ด๋Š” AI ์•ฑ 8๊ฐ€์ง€  (1) 2024.07.03
[IT ๊ธฐ์‚ฌ] โ€œ๋ชจ๋‘๋ฅผ ์œ„ํ•œ AI ์Šˆํผ์ปดโ€ ์• ์ € ํด๋ผ์šฐ๋“œ AI ๋ฐ์ดํ„ฐ์„ผํ„ฐ์˜ ๋‚ด๋ถ€ ์‚ดํŽด๋ณด๊ธฐ  (0) 2024.06.24
[IT ๊ธฐ์‚ฌ] ์—”๋น„๋””์•„, ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ ์ƒ์„ฑํ•˜๋Š” โ€˜๋„ค๋ชจํŠธ๋ก -4 340Bโ€™ ์ถœ์‹œ..."๋น„์šฉ ๋ฌธ์ œ ํ•ด๊ฒฐํ•œ ์˜คํ”ˆ ์†Œ์Šค ์ตœ๊ฐ• ์„ฑ๋Šฅ"  (0) 2024.06.17

์•„๋งˆ์กด, ๋ช‡๋ถ„ ๋งŒ์— ํ”„๋กฌํ”„ํŠธ๋กœ ๊ธฐ์—…์šฉ ์•ฑ ์ƒ์„ฑํ•˜๋Š” ‘์•ฑ ์ŠคํŠœ๋””์˜ค’ ๊ณต๊ฐœ (๋งํฌ)

๊ธฐ์‚ฌ ๋‚ด์šฉ ์š”์•ฝ
 ๋ฒค์ฒ˜๋น„ํŠธ๋Š” 10์ผ(ํ˜„์ง€์‹œ๊ฐ„) AWS๊ฐ€ ์—ฐ๋ก€ ๋‰ด์š• ์„œ๋ฐ‹ ํ–‰์‚ฌ์—์„œ ํ”„๋กฌํ”„ํŠธ๋กœ ๊ธฐ์—…์šฉ ์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” AI ๋„๊ตฌ์ธ ‘์•ฑ ์ŠคํŠœ๋””์˜ค(App Studio)’๋ฅผ ํ”„๋ฆฌ๋ทฐ ๋ฒ„์ „์œผ๋กœ ๊ณต๊ฐœํ–ˆ๋‹ค๊ณ  ๋ณด๋„ํ–ˆ๋‹ค. ์ด ์™ธ์—๋„ ๋‹ค์ˆ˜์˜ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋๋‹ค. 
 ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ AI ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์•ฑ๊ณผ ํ•˜๊ณ  ์‹ถ์€ ์ผ, ํ†ตํ•ฉํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋ฉด ๋œ๋‹ค. ๋ช‡๋ถ„ ๋งŒ์— ํŒŒ์šด๋ฐ์ด์…˜ ์ฝ”๋”ฉ ๋ชจ๋ธ์ด ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ์— ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)์™€ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฐ–์ถ˜ ์›ํ•˜๋Š” ์ „๋ฌธ๊ฐ€๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•œ๋‹ค.
 AWS์— ๋”ฐ๋ฅด๋ฉด, ์•ฑ ์ŠคํŠœ๋””์˜ค๋Š” ์ž‘์—… ํŠน์„ฑ์— ๋”ฐ๋ผ ์•„๋งˆ์กด ํƒ€์ดํƒ„, ์•คํŠธ๋กœํ”ฝ ๋“ฑ ์•„๋งˆ์กด ๋ฒ ๋“œ๋ก์—์„œ ๋Œ์•„๊ฐ€๋Š” ๋‹ค์–‘ํ•œ ๋Œ€ํ˜•์–ธ์–ด๋ชจ๋ธ(LLM)๋“ค์„ ํ™œ์šฉํ•œ๋‹ค.
 ๋˜ AWS๋Š” ์•„๋งˆ์กด ๋ฒ ๋“œ๋ก์—์„œ๋งŒ ์ œ๊ณตํ–ˆ๋˜ '๊ฐ€๋“œ๋ ˆ์ผ' ๊ธฐ๋Šฅ์„ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ํƒ€์‚ฌ ๋ชจ๋ธ์— ๋Œ€ํ•ด์„œ๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ‘๊ฐ€๋“œ๋ ˆ์ผ  API(Guardrails API)’๋ฅผ ํ”„๋ฆฌ๋ทฐ ๋ฒ„์ „์œผ๋กœ ๊ณต๊ฐœํ–ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์ฆ์˜ค ํ‘œํ˜„์ด๋‚˜ ์„ฑ์  ์šฉ์–ด์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๊ฐ€๋“œ๋ ˆ์ผ์„ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์–ผ๋งˆ๋‚˜ ํ—ˆ์šฉํ• ์ง€ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.
 ๋”๋ถˆ์–ด ๊ฐ€๋“œ๋ ˆ์ผ  API์— ๋ชจ๋ธ๊ณผ AI ์—์ด์ „ํŠธ, ๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ(RAG) ์‹œ์Šคํ…œ์ด ์‹ค์ œ๋กœ ํšŒ์‚ฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์žˆ๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์‚ฌ์‹ค์„ ์กฐ์ž‘ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ‘์ปจํ…์ŠคํŠธ ๊ทธ๋ผ์šด๋”ฉ(Contextual Grounding)’์ด๋ผ๋Š” ๊ธฐ๋Šฅ๋„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.
์ด ์™ธ์—๋„ AWS๋Š” ๋ฒ ๋“œ๋ก์—์„œ AI ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค๋„ ๊ณต๊ฐœํ–ˆ๋‹ค. AWS๋Š” ๋ฒ ๋“œ๋ก์— ์ƒˆ๋กœ์šด ์ฝ”๋“œ ํ•ด์„ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€, AI ๋ชจ๋ธ์ด ์ฝ”๋“œ๋กœ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

 

ํ•ต์‹ฌ ์šฉ์–ด
  • ๊ฐ€๋“œ๋ ˆ์ผ์ด๋ž€?
    • ๊ณ ๊ฐ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ํšŒ์‚ฌ์˜ ์ธ๊ณต์ง€๋Šฅ ์ •์ฑ…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณดํ˜ธ์กฐ์น˜ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
    • ์›์น˜ ์•Š๋Š” ์ฝ˜ํ…์ธ  ๋ฐฉ์ง€ / ์ฆ‰๊ฐ์ ์ธ ๊ณต๊ฒฉ(ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž… ๋ฐ ํƒˆ์˜ฅ) ์ฐจ๋‹จ / ๋ฏผ๊ฐํ•œ ์ •๋ณด ์ œ๊ฑฐ
  • ์ปจํ…์ŠคํŠธ ๊ทธ๋ผ์šด๋”ฉ(Contextual Grounding)์ด๋ž€?
    • ๊ธฐ์—… ๋ฐ์ดํ„ฐ์— ๊ธฐ๋ฐ˜ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž์˜ ์ฟผ๋ฆฌ์— ๊ด€๋ จ์ด ์—†๋Š” ๋ชจ๋ธ ์‘๋‹ต์—์„œ ํ™˜๊ฐ ํ˜„์ƒ์„ ํƒ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ

 

โ€ป Reference โ€ป

https://aws.amazon.com/ko/blogs/korea/guardrails-for-amazon-bedrock-can-now-detect-hallucinations-and-safeguard-apps-built-using-custom-or-third-party-fms/ (์•„๋งˆ์กด ๊ฐ€๋“œ๋ ˆ์ผ ๋ฐ ์ปจํ…์ŠคํŠธ ๊ทธ๋ผ์šด๋”ฉ ๊ด€๋ จ ๋‚ด์šฉ)

https://cloud.google.com/blog/ko/products/ai-machine-learning/how-to-use-grounding-for-your-llms-with-text-embeddings

(๊ตฌ๊ธ€์˜ ๊ทธ๋ผ์šด๋”ฉ ๋ฐฉ์‹)


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

ํ•ด์‹œ๋ž€?
ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ์‚ผ์•„ ํ‚ค์™€ ๊ฐ’์„ ์ €์žฅํ•ด์„œ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ํƒ์ƒ‰์„ ์ œ๊ณตํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

 

ํ•ด์‹œ์˜ ํŠน์ง•

  • ๋‹จ๋ฐฉํ–ฅ ๋™์ž‘ (ํ‚ค๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ’์„ ํ†ตํ•ด ํ‚ค๋ฅผ ์ฐพ๊ธฐ ๋ถˆ๊ฐ€๋Šฅ)
  • ํ‚ค ์ž์ฒด๊ฐ€ ์ธ๋ฑ์Šค์ด๋ฏ€๋กœ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•œ ํƒ์ƒ‰ ๋ถˆํ•„์š”
  • ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ๋ณ€ํ™˜๊ณผ์ • ํ•„์š”

 

ํ•ด์‹œ์˜ ๋™์ž‘๋ฐฉ์‹

ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

ํ•ด์‹œ ํ…Œ์ด๋ธ”(hash table) : ํ‚ค์™€ ๋Œ€์‘ํ•œ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณต๊ฐ„

๋ฒ„ํ‚ท(bucket) : ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ฐ ๋ฐ์ดํ„ฐ

 

ํ•ด์‹œ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ถ„์•ผ

๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ๋Œ€์‹  ๋น ๋ฅด๊ฒŒ ์›ํ•˜๋Š” ๊ฐ’ ๊ฒ€์ƒ‰ (๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ / ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ํ™œ์šฉ)

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ด€๋ฆฌ : ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœํ•ด ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๋ฏ€๋กœ ํ•ด์‹ฑํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์‹ฑ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰
  • ๋ธ”๋ก์ฒด์ธ : ๊ฐ ๋ธ”๋ก์€ ์ด์ „ ๋ธ”๋ก์˜ ํ•ด์‹œ๊ฐ’์„ ํฌํ•จํ•˜๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ํ™•์ธ

 

ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ณ ๋ คํ•  ๋‚ด์šฉ

  • ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๋ณ€ํ™˜ํ•œ ๊ฐ’์€ ์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•ด์•ผํ•˜๋ฏ€๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ๋„˜์œผ๋ฉด ์•ˆ๋œ๋‹ค.
  • ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๋ณ€ํ™˜ํ•œ ๊ฐ’์˜ ์ถฉ๋Œ์€ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ๋ฐœ์ƒํ•ด์•ผ ํ•œ๋‹ค.
    (์ถฉ๋Œ : ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ํ‚ค์— ๋Œ€ํ•ด ํ•ด์‹ฑ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•œ ๊ฒƒ์„ ์˜๋ฏธ)

 

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํ•ด์‹œํ•จ์ˆ˜

1) ๋‚˜๋ˆ—์…ˆ๋ฒ• (division method)

 

โ„Ž(๐‘ฅ) = ๐‘ฅ ๐‘š๐‘œ๐‘‘ ๐‘š
  • x = ํ‚ค / m = ์†Œ์ˆ˜ 
  • ํ‚ค๋ฅผ ์†Œ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ (์ถฉ๋Œ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์†Œ์ˆ˜ ์‚ฌ์šฉ)
  • ๋‚˜๋จธ์ง€๋ฅผ ์ทจํ•˜๋Š” ์—ฐ์‚ฐ์„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์ด๋ผ๊ณ  ํ•˜๋ฉฐ ์—ฐ์‚ฐ์ž๋กœ % ์‚ฌ์šฉ
  • m์„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐํ–ˆ์„ ๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ 0~(m-1)์ด๋ฏ€๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” m (ํฐ ์†Œ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ)

2) ๊ณฑ์…ˆ๋ฒ• (multiplication method)

 

โ„Ž(๐‘ฅ) = (((๐‘ฅ โˆ— ๐ด) ๐‘š๐‘œ๐‘‘ 1) โˆ— ๐‘š)
  • m = ์ตœ๋Œ€ ๋ฒ„ํ‚ท์˜ ๊ฐœ์ˆ˜ / A = ํ™ฉ๊ธˆ๋น„ (์ˆ˜ํ•™์ ์œผ๋กœ ์ž„์˜์˜ ๊ธธ์ด๋ฅผ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ์ „์ฒด:๊ธด ๋ถ€๋ถ„ = ๊ธด ๋ถ€๋ถ„:์งง์€ ๋ถ€๋ถ„์ธ ๋น„์œจ)
  • ๊ณฑ์…ˆ๋ฒ•์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹
    • ํ‚ค์— ํ™ฉ๊ธˆ๋น„ ๊ณฑํ•˜๊ธฐ
    • ์œ„์—์„œ ๊ตฌํ•œ ๊ฐ’์˜ ๋ชจ๋“ˆ๋Ÿฌ 1 ์ทจํ•˜๊ธฐ (์ •์ˆ˜ ๋ถ€๋ถ„์„ ๋ฒ„๋ฆฌ๊ณ  ์†Œ์ˆ˜ ๋ถ€๋ถ„ ์ทจํ•˜๊ธฐ)
    • ์œ„์—์„œ ๊ตฌํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์‹ค์ œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋งคํ•‘

 

๋ฌธ์ž์—ด ํ•ด์‹ฑ

โ„Ž๐‘Ž๐‘ โ„Ž(๐‘ ) = (๐‘ [0] + ๐‘ [1] โˆ— ๐‘ + ๐‘ [2] โˆ— ๐‘2 โ€ฆ ๐‘ [๐‘›โˆ’1] โˆ— ๐‘n-1) ๐‘š๐‘œ๐‘‘ ๐‘š
  • ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ด ์ˆซ์ž๋“ค์„ ๋‹คํ•ญ์‹์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ํ•ด์‹ฑ
  • ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ ๊ฐ’์ด ํ•ด์‹œ ํ…Œ์ด๋ธ” ํฌ๊ธฐ์— ๋น„ํ•ด ๋„ˆ๋ฌด ํด ๊ฒฝ์šฐ ์ˆ˜์ • ์ž‘์—… ํ•„์š”
    → ๋ง์…ˆ์„ ์ „๋ถ€ ํ•œ ๋‹ค์Œ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๋Œ€์‹  ์ค‘๊ฐ„์ค‘๊ฐ„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ•ด ๋”ํ•œ๊ฐ’์„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ

 

์ถฉ๋Œ ์ฒ˜๋ฆฌ

์ถฉ๋Œ(collision) : ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค์— ๋Œ€ํ•ด ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ๊ฐ™์€ ๊ฒƒ (ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท์— 2๊ฐœ์˜ ๊ฐ’์„ ๋„ฃdj ์ถฉ๋Œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”)

 

1) ์ฒด์ด๋‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ

์ฒด์ด๋‹ : ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ๋ฒ„ํ‚ท์— ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ

  • ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ณต๊ฐ„ ํ™œ์šฉ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. (์ถฉ๋Œ์ด ๋งŽ์•„์ง€๋ฉด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ ธ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ณต๊ฐ„ ์‚ฌ์šฉ๋„↓)
  • ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค. (์ถฉ๋Œ์ด ๋งŽ์œผ๋ฉด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ ์ž์ฒด์˜ ํ•œ๊ณ„๋กœ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ์ €ํ•˜)

2) ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•(open addressing) : ๋นˆ ๋ฒ„ํ‚ท์„ ์ฐพ์•„ ์ถฉ๋Œ๊ฐ’์„ ์‚ฝ์ž… → ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ฏ€๋กœ ํšจ์œจ์  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ

  • ์„ ํ˜• ํƒ์‚ฌ ๋ฐฉ์‹ (linear probing) 
    • ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ๋นˆ ๋ฒ„ํ‚ท์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ด๋™
    • ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฐ’๋ผ๋ฆฌ ๋ชจ์ด๋Š” ์˜์—ญ์ด ์ƒ๊ฒจ ํด๋Ÿฌ์Šคํ„ฐ ํ˜•์„ฑ (์ด๋Ÿฌํ•œ ๊ตฐ์ง‘์ด ์ƒ๊ธฐ๋ฉด ํ•ด์‹œ๊ฐ’์ด ๊ฒน์น  ํ™•๋ฅ  ์ฆ๊ฐ€)
  • ์ด์ค‘ ํ•ด์‹ฑ ๋ฐฉ์‹
    • ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ 2๊ฐœ ์‚ฌ์šฉ
    • ๋‘ ๋ฒˆ์งธ ํ•ด์‹œํ•จ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ํ•ด์‹œํ•จ์ˆ˜๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์œ„์น˜ ๊ธฐ์ค€ ์–ด๋–ป๊ฒŒ ์œ„์น˜๋ฅผ ์ •ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• 
    • ์„ ํ˜• ํƒ์‚ฌ์™€ ๋น„์Šทํ•˜๊ฒŒ ๋”ํ•˜๋Š” ๋ฐฉ์‹์ด์ง€๋งŒ ์ฃผ์–ด์ง€๋Š” ํ‚ค๋งˆ๋‹ค ์ ํ”„ํ•˜๋Š” ์œ„์น˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„œ ํด๋Ÿฌ์Šคํ„ฐ ํ˜•์„ฑ ๊ฐ์†Œ

 

ํ•ด์‹œ ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ํ‚ค์™€ ๊ฐ’์„ ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ • !!


โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

๋ฌธ์ œ

 

๋ฌธ์ œ ์„ค๋ช…

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒ€์—์„œ๋Š” ๊ธฐ๋Šฅ ๊ฐœ์„  ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์€ ์ง„๋„๊ฐ€ 100%์ผ ๋•Œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜, ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์†๋„๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ๋ณด๋‹ค ๋จผ์ € ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ๊ณ , ์ด๋•Œ ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ๋•Œ ํ•จ๊ป˜ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.
๋จผ์ € ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์˜ ์ง„๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด progresses์™€ ๊ฐ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด speeds๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋ช‡ ๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

์ œํ•œ ์‚ฌํ•ญ

  • ์ž‘์—…์˜ ๊ฐœ์ˆ˜(progresses, speeds๋ฐฐ์—ด์˜ ๊ธธ์ด)๋Š” 100๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—… ์ง„๋„๋Š” 100 ๋ฏธ๋งŒ์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—… ์†๋„๋Š” 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ๋Š” ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ๋งŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜๋ฃจ์˜ ๋์— ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง„๋„์œจ์ด 95%์ธ ์ž‘์—…์˜
    ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ•˜๋ฃจ์— 4%๋ผ๋ฉด ๋ฐฐํฌ๋Š” 2์ผ ๋’ค์— ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

progresses speeds return
[93, 30, 55] [1, 30, 5] [2, 1]
[95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1] [1, 3, 2]

 

 

์†Œ์Šค ์ฝ”๋“œ
# 1
import math

def solution(progresses, speeds):
    n = len(progresses)
    answers = []

    # ๊ฐ ์ž‘์—…์ด 100% ๋˜๊ธฐ ์œ„ํ•ด ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
    times = [math.ceil((100-progresses[i])/speeds[i]) for i in range(n)]

    cnt = 1                 # ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜
    max_time = times[0]     # ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์˜ ์‹œ๊ฐ„์„ max_time์œผ๋กœ ์ง€์ •

    # ์‹œ๊ฐ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋Œ๋ฉด์„œ max_time๊ณผ ๋น„๊ต
    for i in range(1,n):
        if times[i] <= max_time:    # 1. ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด max_time๋ณด๋‹ค ์ ์œผ๋ฉด
            cnt += 1                #    ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ด๋ฏ€๋กœ ์ž‘์—…์˜ ์ˆ˜ +1
        else:                       # 2. ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด max_time๋ณด๋‹ค ๋งŽ์œผ๋ฉด
            answers.append(cnt)     #    ํ˜„์žฌ๊นŒ์ง€ ์™„๋ฃŒํ•œ ์ž‘์—…์˜ ์ˆ˜๋ฅผ answers์— ์ถ”๊ฐ€
            max_time = times[i]     #    max_time์„ ํ˜„์žฌ ์ž‘์—…์˜ ๋‚จ์€์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ
            cnt = 1                 #    ์ž‘์—…์˜ ์ˆ˜ ์ดˆ๊ธฐํ™”
    
    answers.append(cnt)             # 3. ๋งˆ์ง€๋ง‰ ์ž‘์—…์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š๊ณ  for๋ฌธ ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ์ž‘์—… ์ˆ˜ ์ถ”๊ฐ€
        
    return answers

 

ํ’€์ด #1

  • ์ฃผ์–ด์ง„ ์ž‘์—…์˜ ์ˆ˜๋ฅผ n์œผ๋กœ ์ •์˜
  • ์•„๋ž˜์˜ ๊ณต์‹์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ ค๋ฉด ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ times ๋ฆฌ์ŠคํŠธ๋กœ ์ƒ์„ฑ
    • progresses(ํ˜„์žฌ ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ •๋„) + (speeds(์ž‘์—…์˜ ์†๋„) * times(์ž‘์—… ์‹œ๊ฐ„) = 100%
  • cnt : ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜ / max_time : ์•ž๋ถ€๋ถ„ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ ค๋ฉด ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
  • ํ˜„์žฌ ์ž‘์—…์˜ ๋‚จ์€ ์‹œ๊ฐ„(times[i])๊ณผ ๊ธฐ์ค€์ด ๋˜๋Š” ์‹œ๊ฐ„(max_time)์„ ๋น„๊ต
    • times[i] ๊ฐ€ max_time๋ณด๋‹ค ์ ๋‹ค๋ฉด ํ˜„์žฌ์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ด๋ฏ€๋กœ cnt + 1
    • times[i]๊ฐ€ max_time๋ณด๋‹ค ๋งŽ๋‹ค๋ฉด ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๋” ํ•„์š”ํ•œ ๊ฒƒ
      • ํ˜„์žฌ๊นŒ์ง€ ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜๋ฅผ answers์— ์ถ”๊ฐ€
      • ๊ธฐ์ค€์ด ๋˜๋Š” ์‹œ๊ฐ„(max_time)์„ ํ˜„์žฌ ์‹œ๊ฐ„์œผ๋กœ ๋ฐ”๊พธ๊ณ  cnt๋„ ์ดˆ๊ธฐํ™”

 

# 2
def solution(progresses, speeds):
    answers = []
    time = 0    # ์ž‘์—…์ด ํ•„์š”ํ•œ ์‹œ๊ฐ„
    cnt = 0     # ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜

    while len(progresses) > 0:
    	# 1. ์ง„ํ–‰ ์ƒํ™ฉ์ด 100 ์ด์ƒ์ด ๋œ ๊ฒฝ์šฐ
        if(progresses[0] + time * speeds[0]) >= 100:
            progresses.pop(0)   # ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ด๋ฏ€๋กœ progresses์—์„œ ํ•ด๋‹น ์ž‘์—… ์ œ๊ฑฐ
            speeds.pop(0)       # ์ž‘์—…๊ณผ ์†๋„์˜ ์ธ๋ฑ์Šค๋ฅผ ๋งž์ถ”์–ด์•ผ ํ•˜๋ฏ€๋กœ speeds์—์„œ๋„ ์ œ๊ฑฐ
            cnt += 1            # ์ž‘์—…์˜ ์ˆ˜ + 1
        # 2. ์ง„ํ–‰ ์ƒํ™ฉ์ด 100 ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ
        else:
            if cnt > 0:                 # ์™„๋ฃŒ๋œ ์ž‘์—…์ด ์žˆ๋‹ค๋ฉด
                answers.append(cnt)     # ํ˜„์žฌ๊นŒ์ง€ ์™„๋ฃŒํ•œ ์ž‘์—…์„ answers์— ์ถ”๊ฐ€
                cnt = 0                 # ์ž‘์—…์˜ ์ˆ˜ ์ดˆ๊ธฐํ™”
            else:                       # ์™„๋ฃŒ๋œ ์ž‘์—…์ด ์—†๋‹ค๋ฉด
                time += 1               # ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ์ถ”๊ฐ€
    
    # 3. ๋งˆ์ง€๋ง‰ ์ž‘์—…์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š๊ณ  while๋ฌธ ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ์ž‘์—… ์ˆ˜ ์ถ”๊ฐ€
    answers.append(cnt)

    return answers

 

ํ’€์ด #2

  • ์ž‘์—…์ด ํ•„์š”ํ•œ ์‹œ๊ฐ„๊ณผ ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜๋ฅผ ๊ฐ๊ฐ time, cnt๋กœ ์ •์˜
  • ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์ด ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ(progresses)์˜ ๊ธธ์ด๊ฐ€ 0๋ณด๋‹ค ํฌ๋ฉด ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๋ฐ˜๋ณตํ•ด์„œ ์ง„ํ–‰
    • ์•„๋ž˜์˜ ๊ณต์‹์ด 100์ด์ƒ์ด๋ฉด ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ด๋ฏ€๋กœ progresses์™€ speed์—์„œ ํ•ด๋‹น ์ž‘์—… ์ œ๊ฑฐ
      • progresses(ํ˜„์žฌ ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ •๋„) + (speeds(์ž‘์—…์˜ ์†๋„) * times(์ž‘์—… ์‹œ๊ฐ„) = 100%
      • ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜ cnt + 1
    • cnt๊ฐ€ 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์™„๋ฃŒ๋œ ์ž‘์—…์ด ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ answers์— ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜ ์ถ”๊ฐ€ํ•˜๊ณ  ์ดˆ๊ธฐํ™”
    • ์™„๋ฃŒ๋œ ์ž‘์—…์ด ์—†๋‹ค๋ฉด ์‹œ๊ฐ„์ด ๋” ํ•„์š”ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์‹œ๊ฐ„์„ ์ถ”๊ฐ€

 

์‰ฝ๊ฒŒ ํ’€๋ฆด ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ ์€๊ทผํžˆ ํ’€๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๋‹ค.....๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋‘๊ณ  ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ง„ํ–‰์ƒํ™ฉ์„ ํŒ๋‹จํ•ด์„œ ๋น„๊ตํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์„œ ํŽธํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
 

๋ฉ”ํƒ€, 1๋ถ„ ๋งŒ์— 3D ์—์…‹ ์ƒ์„ฑํ•˜๋Š” ‘๋ฉ”ํƒ€ 3D ์  ’ ๊ณต๊ฐœ (๋งํฌ)

๊ธฐ์‚ฌ ๋‚ด์šฉ ์š”์•ฝ
๋ฉ”ํƒ€๊ฐ€ ํ…์ŠคํŠธ ์„ค๋ช…์œผ๋กœ 1๋ถ„ ๋งŒ์— ๊ณ ํ’ˆ์งˆ 3D ์—์…‹(assets)์„ ์ƒ์„ฑํ•˜๋Š” ์ƒˆ๋กœ์šด ์ธ๊ณต์ง€๋Šฅ(AI) ๋„๊ตฌ๋ฅผ ๊ณต๊ฐœํ–ˆ๋‹ค.
3D์  ์€ โ–ฒํ…์ŠคํŠธ-3D ํ˜•ํƒœ ์ƒ์„ฑ์„ ์œ„ํ•œ '3D ์—์…‹์  (AssetGen)'๊ณผ โ–ฒํ…์ŠคํŠธ-์งˆ๊ฐ ์ƒ์„ฑ์„ ์œ„ํ•œ '3D ํ…์Šค์ฒ˜์  (TextureGen)' ๊ธฐ์ˆ ์„ ํ†ตํ•ฉํ•œ ๊ฒƒ์ด๋‹ค. ๋˜ ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ Œ๋”๋ง(PBR)์„ ์ง€์›, ๋‹ค์–‘ํ•œ ์กฐ๋ช… ์กฐ๊ฑด์—์„œ ์‚ฌ์‹ค์ ์ธ 3D ์—์…‹์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
3D์  ์€ ์ฒซ ๋‹จ๊ณ„์—์„œ ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ดˆ๊ธฐ 3D ์—์…‹์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์งˆ๊ฐ๊ณผ PBR ๋งต์ด ํฌํ•จ๋œ 3D ๋ฉ”์‹œ(mesh)๊ฐ€ 30์ดˆ ์•ˆ์— ์ถœ๋ ฅ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ ์ „ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ 3D ์—์…‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ๋†’์€ ํ’ˆ์งˆ์˜ ์งˆ๊ฐ ๋ฐ PBR ๋งต์„ 20์ดˆ ๋งŒ์— ์ƒ์„ฑํ•œ๋‹ค. ๋˜ ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ๋กœ ์ด์ „ ๋‹จ๊ณ„ ์ƒ์„ฑ๋ฌผ์ด๋‚˜ 3D ๋ฉ”์‹œ์— ๋Œ€ํ•œ ์งˆ๊ฐ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 
์ƒ˜ํ”Œ ์˜์ƒ๋งŒ ๊ณต๊ฐœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ์„ฑ๋Šฅ์€ ๊ฒ€์ฆ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์งง์€ ์‹œ๊ฐ„์— ๊ณ ํ’ˆ์งˆ 3D ์—์…‹์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•œ ๊ฐ•์ ์ด๋‹ค.

 

ํ•ต์‹ฌ ์šฉ์–ด
  • 3D ์—์…‹(assets)์ด๋ž€?
    • 3D ์ฝ˜ํ…์ธ ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ์บ๋ฆญํ„ฐ๋‚˜ ๋ฐฐ๊ฒฝ ๋“ฑ์˜ ์š”์†Œ
    • ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ €์ž‘๊ถŒ๊นŒ์ง€ ํฌํ•จํ•œ ๊ฐœ๋…
  • ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ Œ๋”๋ง(PBR, Physically Based Rendering )์ด๋ž€?
    • ์กฐ๋ช…๊ณผ ์žฌ์งˆ ์†์„ฑ์˜ ์ƒํ˜ธ ์ž‘์šฉ ๋ฐฉ์‹์„ ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ์‰์ด๋”ฉ ๋ฐ ๋ Œ๋”๋ง ๊ธฐ๋ฒ•
    • ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •ํ™•ํ•œ ์ง€์ ์—์„œ ์—์…‹์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ
  • 3D ๋ฉ”์‹œ(mesh)
    • ์ , ์„ , ๋ฉด์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”ฝ ๋ชจ๋ธ

 

โ€ป Reference โ€ป

https://www.aitimes.com/news/articleView.html?idxno=147639 (3D ์—์…‹ ๊ด€๋ จ ๊ธฐ์‚ฌ)

https://www.adobe.com/kr/products/substance3d/discover/pbr.html (PBR ๊ฐœ๋… ๋ฐ ์ด์ ์— ๋Œ€ํ•œ ๋‚ด์šฉ)

https://www.3dsolution.kr/82 (๋ฉ”์‹œ์˜ ๊ฐœ๋… ๋ฐ 3D ์Šค์บ”์˜ ๊ธฐ๋ณธ ์›๋ฆฌ)


3D ๊ด€๋ จ ๊ธฐ์‚ฌ๋„ ์ข…์ข… ๋ณด์ด๋Š”๋ฐ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ...3D ๋ถ„์•ผ์—์„œ๋„ ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กœ์›Œ์„œ ์ฝ์–ด๋ณด์•˜๋‹ค. ์„ฑ๋Šฅ์ด ์–ด๋–จ์ง€ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋„ ๊ถ๊ธˆํ•˜๋‹ค. ์„ฑ๋Šฅ์ด ์–ด๋–จ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํฐ ์žฅ์ ์ธ ๊ฒƒ ๊ฐ™๊ณ  ์ถ”ํ›„ ์„ฑ๋Šฅ๋„ ๋†’์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์ „ํ•˜๊ธธ ๊ธฐ๋Œ€ํ•ด๋ณธ๋‹ค. ๐Ÿคฉ

'IT ๊ธฐ์‚ฌ ์Šคํฌ๋žฉ ๐Ÿ“ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[IT ๊ธฐ์‚ฌ] ํ—ˆ๊น…ํŽ˜์ด์Šค, ๋งค๊ฐœ๋ณ€์ˆ˜ 135M์— ๋ถˆ๊ณผํ•œ โ€˜์Šค๋ชฐLMโ€™ ์ถœ์‹œ  (0) 2024.07.18
[IT ๊ธฐ์‚ฌ] ์•„๋งˆ์กด, ๋ช‡๋ถ„ ๋งŒ์— ํ”„๋กฌํ”„ํŠธ๋กœ ๊ธฐ์—…์šฉ ์•ฑ ์ƒ์„ฑํ•˜๋Š” โ€˜์•ฑ ์ŠคํŠœ๋””์˜คโ€™ ๊ณต๊ฐœ  (0) 2024.07.15
[IT ๊ธฐ์‚ฌ] "์š”์•ฝ, ์บ˜๋ฆฐ๋” ๊ด€๋ฆฌ, ํ™”์ƒํšŒ์˜๊นŒ์ง€ ๋งก๊ธด๋‹ค" ์—…๋ฌด ๊ตฌ์„๊ตฌ์„ ์ƒ์‚ฐ์„ฑ ๋†’์ด๋Š” AI ์•ฑ 8๊ฐ€์ง€  (1) 2024.07.03
[IT ๊ธฐ์‚ฌ] โ€œ๋ชจ๋‘๋ฅผ ์œ„ํ•œ AI ์Šˆํผ์ปดโ€ ์• ์ € ํด๋ผ์šฐ๋“œ AI ๋ฐ์ดํ„ฐ์„ผํ„ฐ์˜ ๋‚ด๋ถ€ ์‚ดํŽด๋ณด๊ธฐ  (0) 2024.06.24
[IT ๊ธฐ์‚ฌ] ์—”๋น„๋””์•„, ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ ์ƒ์„ฑํ•˜๋Š” โ€˜๋„ค๋ชจํŠธ๋ก -4 340Bโ€™ ์ถœ์‹œ..."๋น„์šฉ ๋ฌธ์ œ ํ•ด๊ฒฐํ•œ ์˜คํ”ˆ ์†Œ์Šค ์ตœ๊ฐ• ์„ฑ๋Šฅ"  (0) 2024.06.17

"์š”์•ฝ, ์บ˜๋ฆฐ๋” ๊ด€๋ฆฌ, ํ™”์ƒํšŒ์˜๊นŒ์ง€ ๋งก๊ธด๋‹ค" ์—…๋ฌด ๊ตฌ์„๊ตฌ์„ ์ƒ์‚ฐ์„ฑ ๋†’์ด๋Š” AI ์•ฑ 8๊ฐ€์ง€ (๋งํฌ)

๊ธฐ์‚ฌ ๋‚ด์šฉ ์š”์•ฝ
 ์ƒ์„ฑํ˜• AI๊ฐ€ ์ž˜ ํ™œ์šฉ๋˜์–ด ์—…๋ฌด ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ์— ๋„์›€์ด ๋  ์œ ์šฉํ•œ ์•ฑ 8๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

[๋ฌธ์„œ ๋ฐ ํ”„๋ ˆ์  ํ…Œ์ด์…˜]
1. Chat PDF : ์›น ๊ธฐ๋ฐ˜ ํˆด๋กœ PDF, doc, docx ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜๋ฉด ์ด์— ๋Œ€ํ•œ ์งˆ์˜์‘๋‹ต ๊ฐ€๋Šฅ
2. Beautiful.ai : ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ œ์ž‘

[์ด๋ฉ”์ผ]
3. Superhuman : ์ด๋ฉ”์ผ๊ณผ ์ƒํ˜ธ์ž‘์šฉ์— ๊ณ ๋„ํ™”๋˜๊ณ  ์ตœ์ ํ™”๋œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์•ฑ์œผ๋กœ 'AI์—๊ฒŒ ์งˆ๋ฌธํ•˜๊ธฐ' ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ด๋ฉ”์ผ์— ํฌํ•จ๋œ ์‹ค์ œ ์ •๋ณด ์š”์ฒญ ๊ฐ€๋Šฅ

[์บ˜๋ฆฐ๋”]
4. Dola : ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ 4๊ฐ€์ง€ ๋ฉ”์„ธ์ง€ ํ”Œ๋žซํผ(์™“์ธ ์•ฑ/ํ…”๋ ˆ๊ทธ๋žจ/๋ผ์ธ/์• ํ”Œ ๋ฉ”์„ธ์ง€)์™€ ๋‹ค๋ฅธ ์บ˜๋ฆฐ๋”๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐ

[๋ฉ”๋ชจ ๋ฐ ํ•„์‚ฌ]
5. Fathom : ์˜์ƒํ†ตํ™”๋ฅผ ์ž๋™์œผ๋กœ ๋…นํ™”ํ•˜์—ฌ ์š”์•ฝ
6. Whisper Web : ์ด๋ฏธ ๋…น์Œ๋œ ๋Œ€ํ™”๋ฅผ ๊ฐ„๋‹จํžˆ ๊ฒ€์ƒ‰ ๋ฐ ๋‚˜์ค‘์— ์ฐธ์กฐํ•˜๋„๋ก ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™ฉ
7. Summarize.tech : ์œ ํŠœ๋ธŒ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋™์˜์ƒ ์„ธ์…˜์„ ๋‚˜๋ˆ„์–ด ์š”์•ฝ
8. AudioPen : ์‚ฌ์šฉ์ž์˜ ์Œ์„ฑ์„ ์˜ค๋””์˜ค ๋…น์Œ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์š”์•ฝ ๋ฐ ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„ ์ž๋™ ํŽธ์ง‘

 

ํ•ต์‹ฌ ์šฉ์–ด
  • ์•ฑ ๊ฐ€๊ฒฉ ๋น„๊ต 
  ๋กœ๊ทธ์ธ ํ•„์š”์—ฌ๋ถ€ ์š”๊ธˆ์ œ
ChatPDF X - ํ•˜๋ฃจ 2๊ฐœ์˜ ๋ฌธ์„œ ๋ฌด๋ฃŒ
Beautiful.ai O - $144/year (๊ฐœ์ธ ์š”๊ธˆ์ œ)
- $480/year (ํŒ€ ์š”๊ธˆ์ œ)
- $45 (ํ”„๋กœ์ ํŠธ ๋‹จํ’ˆ ๋น„์šฉ)
Superhuman O - $25/month
- $30/month
Dola โ–ณ
(๋ฉ”์„ธ์ง€ ํ”Œ๋žซํผ ๋กœ๊ทธ์ธ)
- ํ˜„์žฌ ์ดˆ๊ธฐ ์•ก์„ธ์Šค ๋‹จ๊ณ„์—์„œ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ
  (์œ ๋ฃŒ ํ”„๋ฆฌ๋ฏธ์—„ ์˜ต์…˜ ์ถ”๊ฐ€๋  ์˜ˆ์ •)
Fathom O - ์ผ๋ถ€ ๋ฌด๋ฃŒ (ํ•ต์‹ฌ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
- $19/month (์—ฐ๊ฐ„ ๊ตฌ๋… ์‹œ $15/month)
Whisper Web X - ๋ฌด๋ฃŒ
Summarize.tech X - ํ•˜๋ฃจ ๋ช‡ ๊ฐœ ๋™์˜์ƒ ๋ฌด๋ฃŒ
- $10/month (ํ•œ ๋‹ฌ์— 200๊ฐœ ๋™์˜์ƒ)
AudioPen X - ์ตœ๋Œ€ 3๋ถ„ ๊ธธ์ด, 10๊ฐœ์˜ ์Œ์„ฑ ๋ฌด๋ฃŒ
- $99/year (๋‹ค์–‘ํ•œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ)

 


๋กœ๊ทธ์ธ๋„ ํ•„์š”์—†๊ณ  ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์–ด์„œ ์ง์ ‘ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค๋Š”๋ฐ ๋ฌด๋ฃŒ ๋ฒ„์ „์ธ๋ฐ๋„ ์„ฑ๋Šฅ์ด ๋‚˜์˜์ง€ ์•Š์•˜๋‹ค. ํ•œ๊ธ€ ๋ฌธ์„œ์™€ ์˜์ƒ์„ ๋„ฃ์–ด๋„ ์˜์–ด๋กœ ๋‹ต๋ณ€์„ ํ•ด์ฃผ๊ธด ํ•˜์ง€๋งŒ....ํ•œ๊ธ€ ์ง€์›์ด ์•ˆ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ์„œ ์“ธ๋งŒํ•œ ๊ฒƒ ๊ฐ™๋‹ค. Dola๋Š” ํ…”๋ ˆ๊ทธ๋žจ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค๋Š”๋ฐ ๋‹ต๋ณ€๋„ ํ•œ๊ธ€๋กœ ๋‚˜์™€์„œ ์ข‹์•˜๋‹ค. ์š”์ฆ˜ ํ•ซํ•œ ์ƒ์„ฑํ˜• AI ๊ธฐ๋Šฅ๋“ค์„ ์—…๋ฌด์— ๋„์›€์ด ๋˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. (์—…๋ฌด ์ค‘์— ๋”ด ์ง“์„ ํ•˜๋ฉฐ...๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป)

ํ(Queue)๋ž€?

๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • FIFO(First In First Out) : ์„ ์ž…์„ ์ถœ
  • push : ํ์— ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ / pop : ํ์—์„œ ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ

 

ํ์˜ ๋™์ž‘์›๋ฆฌ

์ดˆ๊ธฐ ๋น„์–ด์žˆ๋Š” ํ

 

๋น„์–ด์žˆ๋Š” ํ์— '2'์™€ '5'๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์‚ฝ์ž…

 

ํŒ์„ ํ•˜๋ฉด ๋จผ์ € ๋“ค์–ด๊ฐ€ ์žˆ๋˜ '2'๊ฐ€ ๋‚˜์˜ค๊ณ  ํ•œ ๋ฒˆ ๋” ์ง„ํ–‰ํ•˜๋ฉด '5'๋ฅผ ์ œ๊ฑฐ

 

ํ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ถ„์•ผ

์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…

  • ์ž‘์—… ๋Œ€๊ธฐ์—ด : ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์‹œ ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์— ์ž‘์—…์„ ์š”์ฒญํ•˜๋ฉด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—… ์ฒ˜๋ฆฌ
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ : ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ(ํ‚ค๋ณด๋“œ/๋งˆ์šฐ์Šค) ์ฒ˜๋ฆฌ

 

ํ์˜ ADT (Abstract Data Type)

  • ์Šคํƒ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์Šคํƒ์˜ top → ํ์˜ front(์•ž) / rear(๋’ค)
    • ํ๋Š” ์•ž์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๊ณ  ๋’ค์—์„œ ๋„ฃ์œผ๋ฏ€๋กœ ์•ž๋’ค ์ตœ์ข…์œ„์น˜ ์ €์žฅ ํ•„์š”
๊ตฌ๋ถ„ ์ •์˜ ์„ค๋ช…
์—ฐ์‚ฐ boolean isFull() ํ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ maxsize์ธ์ง€ ํ™•์ธํ•ด boolean๊ฐ’ ๋ฐ˜ํ™˜
(๊ฐ€๋“ ์ฐจ ์žˆ๋‹ค๋ฉด True / ์•„๋‹ˆ๋ฉด False)
boolean isEmpty() ํ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š”์ง€ ํ™•์ธํ•ด boolean๊ฐ’ ๋ฐ˜ํ™˜
(๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด False / ์•„๋‹ˆ๋ฉด True)
void push(Item Tyoe item) ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ํ‘ธ์‹œ
ItemType pop() ํ์—์„œ ์ฒ˜์Œ ํ‘ธ์‹œํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒํ•˜๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
์ƒํƒœ Int front ํ์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํŒํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ก
Int rear ํ์—์„œ ์ตœ๊ทผ์— ํ‘ธ์‹œํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ก
ItemType data[maxsize] ํ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฐ์—ด (์ตœ๋Œ€ maxsize๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ)

 

ํ์˜ ์„ธ๋ถ€๋™์ž‘

ํ์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ
ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ (push)

 

ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒฝ์šฐ (pop)

 

๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ (push)

 

ํ ๊ตฌํ˜„ํ•˜๊ธฐ

1) ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹

  • push : append( )
  • pop : pop( )
    •  ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ pop(0) ์‚ฌ์šฉ
queue = []

# ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.append(1)
queue.append(2)
queue.append(3)

# ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
first_item = queue.pop(0)
print(first_item)

# ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.append(4)
queue.append(5)

# ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
first_item = queue.pop(0)
print(first_item)

 

2) ๋ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹

  • DEQ(Double Ended Queue)
  • ์–‘ ๋์—์„œ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ํ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ
from collections import deque

queue = deque()

# ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.append(1)
queue.append(2)
queue.append(3)

# ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
first_item = queue.popleft()
print(first_item)

# ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.append(4)
queue.append(5)

# ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
first_item = queue.popleft()
print(first_item)

โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

https://school.programmers.co.kr/learn/courses/30/lessons/42584

 

๋ฌธ์ œ

 

๋ฌธ์ œ ์„ค๋ช…

์ดˆ ๋‹จ์œ„๋กœ ๊ธฐ๋ก๋œ ์ฃผ์‹๊ฐ€๊ฒฉ์ด ๋‹ด๊ธด ๋ฐฐ์—ด prices๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์€ ๊ธฐ๊ฐ„์€ ๋ช‡ ์ดˆ์ธ์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

 

์ œํ•œ ์‚ฌํ•ญ

  • prices์˜ ๊ฐ ๊ฐ€๊ฒฉ์€ 1 ์ด์ƒ 10,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • prices์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 100,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

prices return
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

 

 

์†Œ์Šค ์ฝ”๋“œ
# 1
def solution(prices):
    n = len(prices)
    answer = []

    for i in range(n):
        idx = 0
        for j in range(i+1,n):
            if prices[j] < prices[i]:   # ํ˜„์žฌ ์ฃผ์‹๊ฐ€๊ฒฉ๋ณด๋‹ค ๋–จ์–ด์ง„ ๊ฒฝ์šฐ
                idx = j                 # ๋–จ์–ด์ง„ ์‹œ์ ์„ idx์— ์ €์žฅํ•˜๊ณ  ์ข…๋ฃŒ
                break

        if idx==0:                      # ํ˜„์žฌ ์ฃผ์‹๊ฐ€๊ฒฉ์—์„œ ๋–จ์–ด์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ
            answer.append(n-i-1)        # ์ „์ฒด ๊ธธ์ด์—์„œ ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ๋บ€ ๊ฐ’
        else:
            answer.append(idx-i)        # ๋–จ์–ด์ง„ ์‹œ์ ์—์„œ ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ๋บธ ๊ฐ’

    return(answer)

 

ํ’€์ด # 1

  • ํ˜„์žฌ์˜ ์ฃผ์‹๊ฐ€๊ฒฉ์€ i๋ฒˆ์งธ์— ์žˆ๋Š” ๊ฐ’์ด๊ณ  ๋‚˜๋จธ์ง€ ์ฃผ์‹๊ฐ€๊ฒฉ์€ j๋ฒˆ์งธ์— ์žˆ๋Š” ๊ฐ’
  • ํ˜„์žฌ ์ฃผ์‹๊ฐ€๊ฒฉ๊ณผ ๋‚˜๋จธ์ง€ ์ฃผ์‹๊ฐ€๊ฒฉ์„ ๋น„๊ตํ•ด์„œ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€๋Š” ์‹œ์ ์„ idx์— ์ €์žฅ
    • ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์กŒ๋‹ค๋ฉด for๋ฌธ ๋น ์ ธ๋‚˜์˜ค๊ธฐ
  • idx๊ฐ€ 0์ด๋ฉด ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์€ ๊ฒƒ์ด๋ฏ€๋กœ ์ „์ฒด๊ธธ์ด์—์„œ ํ˜„์žฌ ์ฃผ์‹๊ฐ€๊ฒฉ์˜ ์ธ๋ฑ์Šค ๋นผ๊ธฐ
  • idx๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง„ ์‹œ์ ์ด idx์ด๋ฏ€๋กœ ๋–จ์–ด์ง„ ์‹œ์ ์—์„œ ํ˜„์žฌ ์ธ๋ฑ์Šค ๋นผ๊ธฐ

 

# 2
def solution(prices):
    n = len(prices)
    answer = [0] * n     

    for i in range(n):
        for j in range(i+1, n):
            answer[i] += 1
            if prices[i] > prices[j]:   # ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง„ ๊ฒฝ์šฐ
                break                   # for๋ฌธ ์ข…๋ฃŒ

    return answer

 

ํ’€์ด #2

  • ์ฃผ์‹๊ฐ€๊ฒฉ ๊ธธ์ด๋งŒํผ์˜ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  • ํ˜„์žฌ ์ฃผ์‹๊ฐ€๊ฒฉ์€ i๋ฒˆ์งธ์— ์žˆ๋Š” ๊ฐ’์ด๊ณ  ๋‚˜๋จธ์ง€ ์ฃผ์‹๊ฐ€๊ฒฉ์€ j๋ฒˆ์งธ์— ์žˆ๋Š” ๊ฐ’
  • answer ๋ฆฌ์ŠคํŠธ์— 1์„ ๋”ํ•˜๊ณ  ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์กŒ๋‹ค๋ฉด for๋ฌธ์„ ์ข…๋ฃŒ
    • ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด for๋ฌธ์œผ๋กœ ๋Œ๋ฉด์„œ +1 ์—ฐ์‚ฐ์„ ์ง„ํ–‰

 

์ฒ˜์Œ์—๋Š” ๋ฌธ์ œ ์ดํ•ด๊ฐ€ ์•ˆ๋์—ˆ๋Š”๋ฐ ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ํ˜„์žฌ ์ธ๋ฑ์Šค ๊ฐ’๊ณผ ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€๊ธฐ ์ „๊นŒ์ง€ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์ •ํ™•๋„์™€ ํšจ์œจ์„ฑ์„ ๋ชจ๋‘ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฌธ์ œ๋ผ์„œ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ ํ•„์š”์—†๋Š” ์—ฐ์‚ฐ์„ ์ง€์šฐ๊ณ  ์ฃผ์‹๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€๋Š” ์ˆœ๊ฐ„๊นŒ์ง€๋งŒ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๋‹ˆ ์˜์™ธ๋กœ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

+ Recent posts