문제설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요
제한사항
s의 길이는 1 이상 5이하입니다.
s의 맨앞에는 부호(+, -)가 올 수 있습니다.
s는 부호와 숫자로만 이루어져있습니다.
s는 "0"으로 시작하지 않습니다.
진행
문자열을 받을때 숫자로받은게 아니니 배열로 받을것이다
조건문을 사용해서 앞의 부호가 있는지 아닌지 확인해야할것 같다
우선 반복문에 써줄 변수 i를 설정해주자
var i = if (s[0] == '+'|| s[0] == '-') 1
else 0
입력받은 값이 부호이면 문자 첫번째열을 넘기고 그 이후숫자들을 정수로 변환해주면 될테니 1
부호가 아니면 첫번째부터 정수로 변환해줘야하니 0 조건문을 사용해서 정의해주자
이제 반복문을 사용해 문자를 정수로 변환하고 반복할수록 10씩 곱해서 더해주면 될것이다
var answer = 0
while (i < s.length){
answer = answer*10 + s[i].toInt()
i++
}
이 상태로 코드 작성을 하면 문제가 된다
문자 1을 정수로 전환하면 1이되는게 아닌 아스키코드값인 48이된다
그래서 문자 '0'을 정수로 전환하면 47이 되니 문자 '0'을 빼줘서 숫자가 정상적으로 보이게하자
while (i < s.length){
answer = answer*10 + (s[i].toInt() - '0'.toInt())
i++
}
조건문으로 문자열이 -로 시작하면 음수로 만들어주자
코드
package com.example.codekata
fun main() {
println("${solution("319")}")
println("${solution("-482")}")
println("${solution("+792")}")
}
fun solution(s: String): Int {
var answer = 0
var i = if (s[0] == '+'|| s[0] == '-') 1
else 0
while (i < s.length){
answer = answer*10 + (s[i].toInt() - '0'.toInt())
i++
}
if (s[0] =='-'){
answer = -answer
}
return answer
}