[Algorithm] Plus One
๋ฌธ์ ์ค๋ช
intํ ๋ฐฐ์ด์ ๋ฐ์์ ์ซ์๋ก ๋ณํ ํ ๊ทธ ์ซ์์ + 1์ ํ ๊ฐ์ ๋ค์ intํ ๋ฐฐ์ด๋ก ๋ฐํํด์ผ ํ๋ค. ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ณด๋ฉด ํจ์ฌ ์ดํด๊ฐ ์ฝ๋ค.
๋ฐฐ์ด๋ก 1, 2, 3์ด ๋ค์ด์๋ค๋ฉด 123 + 1 ์ธ 124๋ฅผ 1, 2, 4๋ก ๋ฐํํ๋ฉด ๋๋ค. ๋ฐ์์ฌ๋ฆผ์ด ์๋ ๊ฒฝ์ฐ๋ ์ฒดํฌํด์ฃผ์ด์ผ ํ๋ค.
ํผ ๋ฐฉ๋ฒ
์ฒ์์๋ ๊ทธ๋ฅ digits๋ฅผ string์ผ๋ก ๋ฐ๊พธ๊ณ ๊ทธ๊ฑธ ๋ค์ Int๋ก ๋ฐ๊ฟ์ + 1์ ํ ๋ค์์ ๋ฐฐ์ด๋ก ๋ณํํด์ ๋ฆฌํดํด์ฃผ๋๋ก ํ๋ค. ํ์ง๋ง ๊ฒฐ๊ณผ๋ failโฆ ํ ์คํธ ์ผ์ด์ค ๋ค ์ ๋์๊ฐ๋๋ฐ ์ ์คํจ๋ก ๋จ๋ ๋ดค๋๋
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์ ๋ผ์๋ฃ๋๋ค.
์ฝ์ง์ ์์ฒญ ํ๋ ๋ฌธ์ .. ์ด๋ ค์ด ๊ฑด ์๋๋ฐ ์ด๋ ๊ฒ ๋๋ฝ๋ค๋ ํํ
Leave a comment