[Algorithm] Plus One

๋ฌธ์ œ ์„ค๋ช…

intํ˜• ๋ฐฐ์—ด์„ ๋ฐ›์•„์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ํ›„ ๊ทธ ์ˆซ์ž์— + 1์„ ํ•œ ๊ฐ’์„ ๋‹ค์‹œ intํ˜• ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋ณด๋ฉด ํ›จ์”ฌ ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.

image

๋ฐฐ์—ด๋กœ 1, 2, 3์ด ๋“ค์–ด์™”๋‹ค๋ฉด 123 + 1 ์ธ 124๋ฅผ 1, 2, 4๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค. ๋ฐ›์•„์˜ฌ๋ฆผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์ฒดํฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

ํ‘ผ ๋ฐฉ๋ฒ•

์ฒ˜์Œ์—๋Š” ๊ทธ๋ƒฅ digits๋ฅผ string์œผ๋กœ ๋ฐ”๊พธ๊ณ  ๊ทธ๊ฑธ ๋‹ค์‹œ Int๋กœ ๋ฐ”๊ฟ”์„œ + 1์„ ํ•œ ๋‹ค์Œ์— ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฆฌํ„ดํ•ด์ฃผ๋„๋ก ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” failโ€ฆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋‹ค ์ž˜ ๋Œ์•„๊ฐ€๋Š”๋ฐ ์™œ ์‹คํŒจ๋กœ ๋œจ๋‚˜ ๋ดค๋”๋‹ˆ

image

digits์˜ ๊ธธ์ด๊ฐ€ 100์ž๋ฆฌ ์ด๋‚ดโ€ฆ ๊ทธ๋Ÿผ UInt64๋กœ๋„ ์ปค๋ฒ„๊ฐ€ ์•ˆ๋˜๋Š” ๊ธธ์ด๊ฐ€ ๋‚˜์˜จ๋‹คโ€ฆ ๐Ÿ˜ข

๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ digits ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ถ€ํ„ฐ ๋ณด๋ฉด์„œ + 1์„ ํ•ด์ฃผ๊ณ  ๋ฐ›์•„์˜ฌ๋ฆผ์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•ด์„œ ๊ณ„์† ์•ž์ชฝ์œผ๋กœ ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋‹ค.

    func plusOne(_ digits: [Int]) -> [Int] {
        var plusOneDigits = digits
        
        guard let last = plusOneDigits.last else { return digits }
        
        if last + 1 < 10 {
            let plusOne = last + 1
            plusOneDigits[plusOneDigits.count - 1] = plusOne
            
            return plusOneDigits
        }
        
        var add = 0
        for (idx, plusOneDigit) in plusOneDigits.reversed().enumerated() {
            let originIdx = plusOneDigits.count - idx - 1
            
            if idx == 0, plusOneDigit + 1 == 10 {
                plusOneDigits[originIdx] = 0
                add = 1
                continue
            }
            
            if plusOneDigit + add < 10 {
                plusOneDigits[originIdx] = plusOneDigit + add
                add = 0
                break
            } else {
                plusOneDigits[originIdx] = 0
                add = 1
            }
        }
        
        if add == 1 {
            plusOneDigits.insert(1, at: 0)
        }
        
        return plusOneDigits
    }
  • 1์„ ๋”ํ–ˆ์„ ๋•Œ ๋ฐ›์•„์˜ฌ๋ฆผ์ด ์—†๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ๋งˆ์ง€๋ง‰ index์˜ ๊ฐ’๋งŒ ์—…๋ฐ์ดํŠธํ•ด์„œ return
  • ๋ฐฐ์—ด์„ ๊ฑฐ๊พธ๋กœ ๋Œ๋ฉด์„œ (๋”ํ•˜๊ธฐ๋ฅผ 1์˜์ž๋ฆฌ๋ถ€ํ„ฐ ํ•˜๊ธฐ ์œ„ํ•ด) ๋ฐ›์•„์˜ฌ๋ฆผ์ด ์—†์„๋•Œ๊นŒ์ง€ ๊ณ„์† 1์”ฉ ๋”ํ•œ๋‹ค
    • 1์˜ ์ž๋ฆฌ๋Š” add๋ฅผ ๋”ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ 1๋กœ ๋”ํ•ด ํŒ๋‹จํ•˜๊ณ ,
    • 10์˜ ์ž๋ฆฌ๋ถ€ํ„ฐ๋Š” ๋ฐ›์•„์˜ฌ๋ฆผ์ด ์žˆ๋‹ค๋ฉด n์˜์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ๋งŒ๋“ค๊ณ  add๋ฅผ 1๋กœ ๋ณ€๊ฒฝ,
    • ๋ฐ›์•„์˜ฌ๋ฆผ์ด ์—†์œผ๋ฉด n์˜ ์ž๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ํ›„ for๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค
  • ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋‹ค ๋Œ์•˜๋Š”๋ฐ๋„ add๊ฐ€ 1์ด ๋‚จ์•„์žˆ๋‹ค๋ฉด ์ž๋ฆฌ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋ฏ€๋กœ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— 1์„ ๋ผ์›Œ๋„ฃ๋Š”๋‹ค.

์‚ฝ์งˆ์„ ์—„์ฒญ ํ–ˆ๋˜ ๋ฌธ์ œ.. ์–ด๋ ค์šด ๊ฑด ์•„๋‹Œ๋ฐ ์ด๋ ‡๊ฒŒ ๋”๋Ÿฝ๋‹ค๋‹ˆ ํ‘ํ‘

๊ฒฐ๊ณผ

image

๋ ˆํฌ ์ปค๋ฐ‹

Categories:

Updated:

Leave a comment