반응형
문제
- Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.
- Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
예시
- x를 넣으면 reversed된 값을 반환하게 만들어야합니다.
풀이
1. String으로 변환후 순서 뒤집기
- 저는 integer을 string으로 바꿔서 char 하나씩 접근하여 보내려했는데
//오답
fun reverse(x: Int): Int {
val change = "$x"
val reversed = change.reversed()
var str = StringBuilder()
for (i in reversed.indices){ //i in 0..2
if(reversed[i] == '-'){
str.insert(0,'-') //가장 앞 포지션에 -를 넣는다.
} else if (reversed[i] == '0' && i == reversed.length-1)
str.insert(0,"")//0이라면
else str.append(reversed[i]) //아니라면 뒤에서부터 넣는다.
}
return str.toString().toInt()
}
- 위 예시 example 3번 120을 제 식으로 대입 했을때 0이 제거된 21 이 아닌 012가되어서 문제가 생겼습니다. (이문제에서는 0이 없어야합니다. 모든 값을 string으로 인식하기 때문에 이렇게 답이 나오게되 었습니다.)
- 그렇게 다른 답을 찾던 도중 더 간단한 풀이를 찾았습니다.
2. Int 순서 뒤집기
class Solutions {
fun reverse(x: Int): Int {
var y = x.toLong()
var result: Long = 0
while (y != 0.toLong()) { //이 반복문이 reverse시켜줍니다.
result = result * 10 + y % 10
y = y / 10
}
return if (Int.MAX_VALUE < result || Int.MIN_VALUE > result) 0 else result.toInt()
}
}
- while 문을 풀이하면 x = 123
- result = 0 x 10 + 123%10 = 3, y = 12
- result = 3 x 10 + 12%10 = 32, y = 1
- result = 320 + 1%10 = 321 y = 0 y가 0이되어서 while이 멈춥니다.
- 그러면 result 는 321로 되고 이값을 리턴하게 됩니다.
반응형