본문 바로가기

IT/알고리즘

[알고리즘] ParseInt 구현

728x90
SMALL

double = null

+ , - , overflow , string

class ParseInt {


    @Test
    fun solution() {
        val string: String = "a"
        val num: String = "1"
        val num2: String = "12345"
        val minusNum: String = "-12345"
        val plusNum: String = "+12345"
        val zero: String = "0"
        val double: String = "123.456"
        val longInt: String = "12345555555555555"

        assertEquals(parseInt(string), null)
        assertEquals(parseInt(num), 1)
        assertEquals(parseInt(num2), 12345)
        assertEquals(parseInt(minusNum), -12345)
        assertEquals(parseInt(plusNum), 12345)
        assertEquals(parseInt(zero), 0)
        assertEquals(parseInt(double), null)
        assertEquals(parseInt(longInt), null)
    }


    private fun parseInt(s: String): Int? {
        val char = s.toCharArray()
        var offset = 1
        var result = 0
        char.map {
            when (it) {
                '+' -> {
                    offset = 1
                }

                '-' -> {
                    offset = -1
                }

                else -> {
                    if (it - '0' in 0..9) {
                        if (result >= Int.MAX_VALUE / 10) {
                            return null
                        }
                        result *= 10
                        result += (it - '0')
                    } else {
                        return null
                    }
                }
            }
        }
        return result * offset
    }
}
728x90
LIST

'IT > 알고리즘' 카테고리의 다른 글

[백준] 6603번 로또  (0) 2025.03.10
[백준] 11048번 이동하기  (0) 2025.01.06
[백준] 14502번 연구소  (0) 2024.12.16
[백준] 16917번 양념 반 후라이드 반  (0) 2024.12.11
[백준] 11651번 좌표정렬하기_2  (3) 2024.12.09