문제 설명 |
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성되어있는지 확인해주는 함수, solution 완성하세요. 예를 들어 s가 “a234”이면 False를 리턴하고 “1234”이면 True를 리턴하면 됩니다. |
제한 조건 |
|
입출력 예 |
|
s | return |
"a1234" | false |
"1234" | true |
나의 풀이
1. try~catch문을 사용하여 int로 변환이 가능하고, 다시 string으로 바꿨을 때 s와 같으면 숫자로만 구성되어 있음
2. int로 변환이 안되어 오류가 떨어져 catch문을 타게 되면 문자열 길이와 상관 없이 false
3. try에서 문자열을 비교한 후 길이가 4나 6이면 true, 이외 false 값 리턴
class Solution {
fun solution(s:String):Boolean {
try {
if (s.toInt().toString() == s)
return (s.length == 4 || s.length == 6)
}
catch (e:NumberFormatException){
return false
}
return false
}
}
진짜 소름돋았던게... 내가 JAVA로 풀었을 때도 try~catch 문을 사용했었는데 코틀린도 똑같이 풀었다... 차이가 있다면 그때는 try~catch문이 처음이었고 이번엔 편하게 사용했다는 점? |
Kotlin1 코드 정리
1. isDigit()이라는 숫자 판별 내장 함수 사용
2. s의 원소값이 숫자면 length+
3. s의 길이와 숫자만 판별한 length 값을 비교해서 같고, 그 길이가 4나 6이면 true 리턴
class Solution {
fun solution(s: String): Boolean {
val length = s.filter{ it.isDigit() }.length
return (length==4 || length==6) && length==s.length
}
}
kotlin을 잘 활용하려면 filter가 손에 익어야하는데 왜 이렇게 잘 안써질까... 아직 코틀린 감을 잡는 단계여서 그런가보다. 내가 숫자를 판별하는 걸로 머리를 싸맨 것이 무색할 정도로 간결한 코드이다. |
Kotlin2 코드 정리
1. s의 길이가 4나 6이 아니면 false 리턴
2. s를 charArray로 변경 후 그 원소 c를 isDigit() 함수를 활용해 숫자 판별
3. 숫자가 아닌 원소가 있으면 false 리턴
class Solution { // 형광펜 두 조건 만족하면 false
fun solution(s: String): Boolean {
if(s.length!=4 && s.length!=6) {
return false
}
for (c in s.toCharArray()) {
if(!c.isDigit()) {
return false
}
}
return true
}
}
'프로그래머스 > Kotlin | Level1' 카테고리의 다른 글
[프로그래머스/Kotlin]Level1 - 수박수박수박수박수박수? (0) | 2021.05.01 |
---|---|
[프로그래머스/Kotlin]Level1 - 두 정수 사이의 합 (0) | 2021.04.29 |
[프로그래머스/Kotlin]Level1 - X만큼 간격이 있는 n개의 숫자 (0) | 2021.04.27 |
[프로그래머스/Kotlin]Level1 - 직사각형 별찍기 (0) | 2021.03.17 |
[프로그래머스/Kotlin]Level1 - 문자열을 정수로 바꾸기 (0) | 2021.03.17 |