๐Ÿ€TIL๐Ÿ€[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] Coding Test ์Šคํ„ฐ๋””7

PYMยท2023๋…„ 8์›” 23์ผ
0

๐Ÿ€TIL๐Ÿ€Coding Test

๋ชฉ๋ก ๋ณด๊ธฐ
7/16
post-thumbnail

์˜ค๋Š˜์€ ์ž๋ฃŒ ๊ตฌ์กฐ ์ค‘ ์Šคํƒ๊ณผ ํ ๊ด€๋ จํ•ด์„œ ๊ณต๋ถ€ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์กฐ๊ธˆ ํ’€์–ด๋ดค๋‹ค!

์Šคํƒ(Stack)

  • ์Šคํƒ์€ ํ›„์ž…์„ ์ถœ(Last In First Out) ๊ตฌ์กฐ์ด๋‹ค. (ํ”„๋ง๊ธ€์Šค ๊ฐ™์€..?)

  • ์ฆ‰, ์ž๋ฃŒ๊ตฌ์กฐ Stack์˜ ํŠน์ง•์€ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ํ•˜๋‚˜์˜ ๋ฐฉํ–ฅ, ์ฆ‰ ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์ด๋ฅผ ์ œํ•œ์  ์ ‘๊ทผ์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • LIFO(Last In First Out) ํ˜น์€ FILO(First In Last Out)

  • Stack์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ 'PUSH', ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ์„ 'POP'

  • ์‹ค์ƒํ™œ์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ํ™œ์šฉ๋œ๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„

    • ์‚ฝ์ž…๊ณผ ์‚ญ์ œ : O(1)
    • ํƒ์ƒ‰: O(n)

๐Ÿ’ŸStack ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์žฅ์ 

  • ์Šคํƒ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค

  • ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ํ•ญ์ƒ ์Šคํƒ์˜ ๋งจ ์œ„์—์„œ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค!

    • ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ์‚ญ์ œํ•˜๋Š”๋ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

๐Ÿ’ŸStack ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๋‹จ์ 

  • ๋‹น์—ฐํ•˜๊ฒŒ๋„, ์ค‘๊ฐ„ ์š”์†Œ์˜ ์ ‘๊ทผ์ด ์ œํ•œ๋œ๋‹ค

  • ์ƒ๋‹จ(top) ์š”์†Œ์—๋งŒ ์ง์ ‘์ ์ธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ค‘๊ฐ„์— ์žˆ๋Š” ์š”์†Œ์—๋Š” ์ง์ ‘์ ์ธ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ์ฆ‰, ์ค‘๊ฐ„ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์ƒ๋‹จ ์š”์†Œ๋ฅผ ๊ณ„์† Popํ•˜์—ฌ ์›ํ•˜๋Š” ์š”์†Œ์— ๋„๋‹ฌํ•ด์•ผ๋งŒ ํ•œ๋‹ค!
  • ๋˜ํ•œ, ์Šคํƒ์€ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค.

    • ์Šคํƒ์˜ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด
      "์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Stack Overflow)"๊ฐ€ ๋ฐœ์ƒ

ํ(Queue)

ํ(Queue)๋Š” ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๋‹ค, ๋Œ€๊ธฐ์—ด์ด๋ผ๋Š” ๋œป

  • ์ž๋ฃŒ๊ตฌ์กฐ Queue๋Š” Stack๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ(data)๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” FIFO(First In First Out) ํ˜น์€ LILO(Last In Last Out)์„ ํŠน์ง•์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ์ž…๋ ฅ์˜ ๋ฐฉํ–ฅ๊ณผ ์ถœ๋ ฅ์˜ ๋ฐฉํ–ฅ์ด ๊ฐ๊ฐ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ์‹œ์—๋Š” ํ์˜ ๋์—์„œ(rear), ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ๋Š” ํ์˜ ๋งจ ์•ž์—์„œ(front) ์ง„ํ–‰.

  • Queue์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ 'enqueue', ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ์„ 'dequeue'๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์ž๋ฃŒ๊ตฌ์กฐ Queue๋Š” ๋ฐ์ดํ„ฐ(data)๊ฐ€ ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ

  • ๊ฐ ์ฒ˜๋ฆฌ ์‹œ๋งˆ๋‹ค ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋บ„ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํ์— ํ•œ ๊ฐœ์”ฉ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด ํ ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์Œ“์—ฌ ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ๋ฐ์ดํ„ฐ๋ฅผ ๋บ„ ๋•Œ๋Š” ํ์˜ ๋งจ ์•ž์—์„œ ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ์„ ๋บ„ ์ˆ˜ ์žˆ๋‹ค,

  • ์„ ํ˜• ํ, ์šฐ์„ ์ˆœ์œ„ ํ, ์›ํ˜• ํ ์„ธ์ข…๋ฅ˜๊ฐ€ ์กด์žฌ.

  • BFS(Breadth First Search) ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์Šคํƒ๊ณผ ๋™์ผํ•˜๋‹ค!

  • ํ๋ž‘ ์™€์ผ๋ฌธ์€ ์ง๊ฟ์ด๋‹ค!

๐Ÿ’ŸQueue ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์žฅ์ 

1. ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋‚˜ ์ž‘์—… ์ฒ˜๋ฆฌ์—์„œ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์— ์œ ์šฉ

  • ์„ ์ž…์„ ์ถœ(First-In-First-Out, FIFO)์˜ ํŠน์ง• ๋•๋ถ„์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋‚˜ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ์˜ ๊ฐ€์žฅ ์•ž(front)์—์„œ๋Š” ๊ฐ€์žฅ ์˜ค๋ž˜์ „์— ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ๊ฐ€, ๊ฐ€์žฅ ๋’ค(rear)์—๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•œ๋‹ค.
    ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์ˆœ์„œ์™€ ์‚ญ์ œํ•˜๋Š” ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•˜๊ฒŒ ์œ ์ง€!

  • ex. ํ”„๋ฆฐํ„ฐ์—์„œ ์ธ์‡„ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์€ํ–‰์—์„œ ๋Œ€๊ธฐ ์ค‘์ธ ๊ณ ๊ฐ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒฝ์šฐ, ์ฑ„ํŒ… ์‹œ์Šคํ…œ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒฝ์šฐ

2. ๋‹ค๋ฅธ ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค

  • ํ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋Š” ๊ฐ๊ฐ ํ์˜ ๋๋‹จ์—์„œ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.

  • ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ์—๋Š” ํ์˜ ๋๋‹จ์—์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๋•Œ๋Š” ํ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚œ๋‹ค.
    ์ฆ‰ ํ์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์‹œ ๋‹จ ํ•œ ๋ฒˆ์˜ ์‹คํ–‰๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅํ•˜๋‹ค. (์‹œ๊ฐ„๋ณต์žก๋„: O(1))

๐Ÿ’ŸQueue ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๋‹จ์ 

  • ํ๋Š” ํŠน์ • ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ์ƒํ™ฉ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

  • ํ๋Š” ๋‹ค๋ฅธ ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์—ฐ์‚ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ค‘๊ฐ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    ๋”ฐ๋ผ์„œ ํ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.

์Šคํƒ๊ณผ ํ์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ 

๐Ÿ’Ÿ๊ณตํ†ต์ 

์Šคํƒ๊ณผ ํ ๋ชจ๋‘ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐ์ž‘ํ•œ๋‹ค. ๋‘˜ ๋‹ค ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์ œ๊ฑฐ๋ฅผ ํ†ตํ•ด ๋™์ž‘ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๐Ÿ’Ÿ์ฐจ์ด์ 

์Šคํƒ๊ณผ ํ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์ œ๊ฑฐ ๋ฐฉ์‹์—์„œ ๋‚˜ํƒ€๋‚œ๋‹ค. ์Šคํƒ์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์ œ๊ฑฐ๊ฐ€ ๊ฐ™์€ ๊ณณ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๋ฐ˜๋ฉด, ํ์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€๊ฐ€ ํ•œ ์ชฝ ๋์—์„œ, ์ œ๊ฑฐ๊ฐ€ ๋ฐ˜๋Œ€ ์ชฝ ๋์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

Q1. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ

๊ด„ํ˜ธ๊ฐ€ ๋ฐ”๋ฅด๊ฒŒ ์ง์ง€์–ด์กŒ๋‹ค๋Š” ๊ฒƒ์€ '(' ๋ฌธ์ž๋กœ ์—ด๋ ธ์œผ๋ฉด ๋ฐ˜๋“œ์‹œ ์ง์ง€์–ด์„œ ')' ๋ฌธ์ž๋กœ ๋‹ซํ˜€์•ผ ํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

"()()" ๋˜๋Š” "(())()" ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์ž…๋‹ˆ๋‹ค.
")()(" ๋˜๋Š” "(()(" ๋Š” ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์ž…๋‹ˆ๋‹ค.
'(' ๋˜๋Š” ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฌธ์ž์—ด s๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์ด๋ฉด true๋ฅผ return ํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์ด๋ฉด false๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๋ฌธ์ž์—ด s์˜ ๊ธธ์ด : 100,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ๋ฌธ์ž์—ด s๋Š” '(' ๋˜๋Š” ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿฃ๋‚ด ์ฝ”๋“œ

function solution(s){
    const stack = [];
    
    if(s[0] === ')' || s[s.length-1] === '('){
        return false
    }
    
    s.split('').map((target) => {
        if(target === ')'){
            stack.pop()
        }
        else{
            stack.push(target)
        }
    })
    
    return stack.length === 0;
}

Q2. ๊ธฐ๋Šฅ๊ฐœ๋ฐœ

๐Ÿฃ๋‚ด ์ฝ”๋“œ

function solution(progresses, speeds) {
    let stack = [];
    let answer = [];
    
    for(let i = 0; i < progresses.length; i++){
        stack.push(Math.ceil((100 - progresses[i]) / speeds[i]))
    }

    let currentNum = stack[0]
    let complete = 0;   
    
    for(let i = 0; i < stack.length; i++){
        if(stack[i] <= currentNum){
            complete++;
        }else{
            answer.push(complete);
            complete = 1;
            currentNum = stack[i]
        }
    }
    
    answer.push(complete)
    
    return answer; 
}

๊ทธ ์™ธ์— ์ƒˆ๋กœ์ด ์•Œ๊ฒŒ๋œ ๊ฒƒ & ๊ธฐ์–ตํ•  ๊ฒƒ

  • ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ฉด false์ด๋‹ค. arr.length๋กœ true, false ํ‘œํ˜„๊ฐ€๋Šฅ
profile
๋ชฉํ‘œ๋Š” "ํ•จ๊ป˜ ์ผํ•˜๊ณ  ์‹ถ์€, ํ•จ๊ป˜ ์ผํ•ด์„œ ์ข‹์€" Front-end ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€