Skip to content

Instantly share code, notes, and snippets.

@mumunuu
Last active January 27, 2021 11:15
Show Gist options
  • Save mumunuu/a236a3ad9543e68c834de3aba94259af to your computer and use it in GitHub Desktop.
Save mumunuu/a236a3ad9543e68c834de3aba94259af to your computer and use it in GitHub Desktop.
algorithm(leetcode) String to Integer (atoi)
func myAtoi(s string) int {
s = strings.TrimSpace(s) //좌우 여백을 삭제
s = strings.TrimRightFunc(s, func(r rune) bool {
return !unicode.IsNumber(r)
}) //우측은 숫자가 나올때까지 추가로 삭제
stringArr := make([]string, 0) //정답을 넣을 배열을 생성
//한번씩만 넣기 위한 플래그
dotFlag := false
signFlag := false
for _, v := range s {
if string(v) == " " || unicode.IsLetter(v) { //처음에 빈 공백이나, 문자가 오면 바로 종료
break
} else if string(v) == "." { //소수점은 한번까지만 넣어준다.
if dotFlag {
break
}
stringArr = append(stringArr, string(v))
dotFlag = true
} else if string(v) == "+" || string(v) == "-" { //부호는 한번씩만 넣어준다.
if signFlag {
break
}
stringArr = append(stringArr, string(v))
signFlag = true
} else {
stringArr = append(stringArr, string(v)) //그 외 숫자는 모두 넣어줌
}
}
val, err := strconv.ParseFloat(strings.Join(stringArr, ""), 64) //배열을 string으로 전환하고, 인티저 값으로 치환함
if err != nil { //변환하지 못했다면 0
return 0
}
//32bit overflow 처리
if val >= math.MaxInt32 {
return math.MaxInt32
} else if val < math.MinInt32 {
return math.MinInt32
} else {
return int(val)
}
return 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment