CASE (문자열 다루기 기본)
문제설명
- 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
- s는 길이 1 이상, 길이 8 이하인 문자열입니다.
- s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
처음 내가 생각해 본 문제 풀이
class Solution {
fun solution(s: String): Boolean {
val checkNumber = s.map {it.code}.toList()
if (checkNumber.size != 4 && checkNumber.size != 6) return false
for (i in checkNumber) {
if (i !in 48..57) {
return false
}
}
return true
}
}
처음 생각해 본 풀이는 문자열 하나 하나 map 으로 받아온 다음, map으로 받아올 시 Char Type 으로 변환되니
.code 활용 아스키 코드로 받아온 후 리스트를 만들어줍니다.
일차적으로 checkNumber size 를 체크해주고, 사이즈가 4 혹은 6인 경우
for 문을 돌려 Index i 의 값이 숫자 아스키 코드 내 포함되어 있을 경우 (48 - 57 사이)
true를 반환해줍니다.
결국 문제를 풀었으나 생각해보면 불필요한 과정들이 너무 많이 추가되어 간결하게 정리해 본 코드는 다음과 같습니다.
class Solution {
fun solution(s: String): Boolean {
if (s.length != 4 && s.length != 6) return false
for (i in s) {
if (i.code !in 48..57) {
return false
}
}
return true
}
}
변수 checkNumber 을 넣을 필요도 없이 if 문 안에서 값을 .code 로 변환한 후 값을 체크하면 되었습니다. 그런데 더 더욱 간단한 코드가 있었습니다.
그러니깐 굳이 아스키 코드로 변환할 필요가 없었습니다..
class Solution {
fun solution(s: String): Boolean {
if (s.length != 4 && s.length != 6) return false
for (i in s) {
if (i !in '0'..'9') {
return false
}
}
return true
}
}
char은 문자열 형태로도 값을 체크할 수 있어서 (아스키코드로 변환하여 값을 확인) 굳이 .code 를 활용할 필요가 없었습니다.
그리고 다른 사람의 풀이를 보니 기가막힌 풀이를 발견했습니다. (제 기준이랍니다 ..)
다른 사람의 문제 풀이
class Solution {
fun solution(s: String): Boolean {
if (s.length == 4 || s.length == 6) {
return s.toIntOrNull() != null
}
return false
}
}
.toIntOrNull() ?
문자열을 정수형 타입으로 반환해주는데, 반환을 못해주는 경우 (문자열이 수로만 이루어져 있지 않을 경우) Null 을 반환합니다.