๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ํ”„๋ฆฐํ„ฐ Programmers(Lv.2)

by seolhee2750 2021. 8. 19.
๋ฌธ์ œ ์„ค๋ช…

์ผ๋ฐ˜์ ์ธ ํ”„๋ฆฐํ„ฐ๋Š” ์ธ์‡„ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ๋ฌธ์„œ๊ฐ€ ๋‚˜์ค‘์— ์ธ์‡„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ์ธ์‡„ํ•˜๋Š” ํ”„๋ฆฐํ„ฐ๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กญ๊ฒŒ ๊ฐœ๋ฐœํ•œ ํ”„๋ฆฐํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ธ์‡„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

1. ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ(J)๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก์—์„œ ๊บผ๋ƒ…๋‹ˆ๋‹ค.
2. ๋‚˜๋จธ์ง€ ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์—์„œ J๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•œ ๊ฐœ๋ผ๋„ ์กด์žฌํ•˜๋ฉด J๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
3. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด J๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 4๊ฐœ์˜ ๋ฌธ์„œ(A, B, C, D)๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์žˆ๊ณ  ์ค‘์š”๋„๊ฐ€ 2 1 3 2 ๋ผ๋ฉด C D A B ์ˆœ์œผ๋กœ ์ธ์‡„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ธ์‡„๋ฅผ ์š”์ฒญํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ C๋Š” 1๋ฒˆ์งธ๋กœ, A๋Š” 3๋ฒˆ์งธ๋กœ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค.

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

 

์ œํ•œ ์กฐ๊ฑด
  • ํ˜„์žฌ ๋Œ€๊ธฐ๋ชฉ๋ก์—๋Š” 1๊ฐœ ์ด์ƒ 100๊ฐœ ์ดํ•˜์˜ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ธ์‡„ ์ž‘์—…์˜ ์ค‘์š”๋„๋Š” 1~9๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์ˆซ์ž๊ฐ€ ํด์ˆ˜๋ก ์ค‘์š”ํ•˜๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
  • location์€ 0 ์ด์ƒ (ํ˜„์žฌ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์žˆ๋Š” ์ž‘์—… ์ˆ˜ - 1) ์ดํ•˜์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ์œผ๋ฉด 0, ๋‘ ๋ฒˆ์งธ์— ์žˆ์œผ๋ฉด 1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ
priorities location return
[2, 1, 3, 2] 2 1
[1, 1, 9, 1, 1, 1] 0 5

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
func solution(_ priorities:[Int], _ location:Int) -> Int {
  var docs = priorities // ๋Œ€๊ธฐ์—ด
  var now = location // ์š”์ฒญํ•œ ๋ฌธ์„œ์˜ ํ˜„์žฌ ์œ„์น˜
  var print = 0 // ์ถœ๋ ฅ๋œ ๋ฌธ์„œ ๊ฐœ์ˆ˜
  
    while true {
        // ๋Œ€๊ธฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์˜ ์ค‘์š”๋„๊ฐ€ ๊ฐ€์žฅ ๋†’์„ ๊ฒฝ์šฐ
        if docs.first! == docs.max() {
            if now == 0 { return print + 1 }
            else { now -= 1 }
            
            // ์ถœ๋ ฅ
            docs.removeFirst()
            print += 1
        }
        
        // ๋Œ€๊ธฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์˜ ์ค‘์š”๋„๊ฐ€ ๊ฐ€์žฅ ๋†’์ง€ ์•Š์„ ๊ฒฝ์šฐ
        else {
            docs.append(docs.removeFirst())
            
            if now == 0 { now = docs.count - 1 }
            else { now -= 1 }
        }
    }
}

๐Ÿ‘‰ ์ด ๋ฌธ์ œ๋Š” FIFO ๋ฐฉ์‹์œผ๋กœ ํ’€์ดํ•œ๋‹ค.

  • priorities๋ฅผ docs๋กœ, location์„ now ๋ณ€์ˆ˜๋กœ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๊ณ , ์ถœ๋ ฅ๋œ ๋ฌธ์„œ ๊ฐœ์ˆ˜๋ฅผ ๋‹ด์„ print ๋ณ€์ˆ˜๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋‹ค.
  • docs์˜ ๋งจ ์•ž ๋ฌธ์„œ๋ถ€ํ„ฐ ์ค‘์š”๋„๋ฅผ ํ™•์ธํ•˜๋Š”๋ฐ,  max๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์ผ ํฐ ์ค‘์š”๋„๋ฅผ ์ฒดํฌํ–ˆ๋‹ค.
    ๋งจ ์•ž ์š”์†Œ๊ฐ€ max์™€ ๊ฐ™์„ ๊ฒฝ์šฐ ์ค‘์š”๋„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ˜„์žฌ ๊ฐ€์žฅ ์•ž์— ์œ„์น˜ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ
    ์ถœ๋ ฅ์„ ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ, ๊ทธ ์ „์— ์ถœ๋ ฅํ•  ๋ฌธ์„œ๊ฐ€ ๋‚ด๊ฐ€ ์š”์ฒญํ•œ ๋ฌธ์„œ์ธ์ง€๋ฅผ ๋จผ์ € ํ™•์ธํ–ˆ๋‹ค.
    now ๋ณ€์ˆ˜๊ฐ€ 0์ด๋ผ๋ฉด ํ˜„์žฌ ๋‚ด๊ฐ€ ์š”์ฒญํ•œ ๋ฌธ์„œ๊ฐ€ ๋งจ ์•ž์ž๋ฆฌ์— ์™€์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ, ๋ฐ”๋กœ return ํ•ด์ค€๋‹ค.
    ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด, ๋งจ ์•ž์ž๋ฆฌ ๋ฌธ์„œ๊ฐ€ ์ถœ๋ ฅ๋จ์œผ๋กœ ์ธํ•ด ๋‚ด ๋ฌธ์„œ๋„ ํ•œ ์นธ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ธฐ ๋•Œ๋ฌธ์— -1 ํ•ด์ค€๋‹ค.
    now ๋ณ€์ˆ˜ ์—…๋ฐ์ดํŠธ๋ฅผ ๋งˆ์น˜๋ฉด ๋Œ€๊ธฐ์—ด์˜ ๋งจ ์•ž์ž๋ฆฌ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ , print์— 1์„ ๋ˆ„์ ํ•œ๋‹ค.
  • docs์˜ ๋งจ ์•ž ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ max์™€ ๊ฐ™์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š”
    ๋ฐ”๋กœ ๋Œ€๊ธฐ์—ด์˜ ๋งจ ์•ž์ž๋ฆฌ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•จ๊ณผ ๋™์‹œ์— ๋งจ ๋’ค์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ now์— ๋ฐ”๋€ ๋‚ด ๋ฌธ์„œ ์œ„์น˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ๊ณ„์† ๋งจ ์•ž ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐ˜๋ณต์ด ๋„ˆ๋ฌด ์‹œ๊ฐ„์„ ๋งŽ์ด ์žก์•„๋จน์„ ๊ฒƒ ๊ฐ™์•„ ์ฒ˜์Œ์—” LIFO๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€๋ ค๊ณ  ์ด๋ฆฌ์ €๋ฆฌ ๊ณ ๋ฏผํ•ด๋ดค๋Š”๋ฐ, ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ ๋…ผ๋ฆฌ๊ฐ€ ๋งž์ง€ ์•Š์•„ FIFO๋กœ ํ’€์—ˆ๋”๋‹ˆ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 


 

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/42587

๋Œ“๊ธ€