문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.
예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s | return |
"a234" | false |
"1234" | true |
문제를 푸는 과정에서 잦은 오류가 있었고 그것들을 해결하는 과정에서 새로운 내용을 알게되어 정리하려고 한다.
또한 구글링을 하던 과정에서 두가지 문제 해결 방법을 알았는데 이것들을 코드로 구현하여 나타냈다.
1. 반복문을 통한 문자열 비교
class Solution {
public boolean solution(String s) {
if(s.length()!=4 && s.length()!=6){
return false;
}
for(int i=0; i<s.length(); i++){
if(s.charAt(i) < '0' || s.charAt(i) >'9')
return false;
}
return true;
}
}
문제의 원인
처음 charAt()을 이용하여 문자열에 담겨져 있는 숫자를 0~9까지 범위 안에 있는지 비교하려고 했으나,
반환하는 값의 형식이 char 이었기 때문에 어떻게 if문 안에서 크기를 비교할 것인지 고민하며 코드 작성에 어려움을 겪었다.
해결 방법
오류가 발생했던 이유는 chartAt()의 값과 비교하는 값에 정수값을 넣고 비교했기 때문인데
이를 해결하기 위해 'charAt()의 반환값과 정수형을 비교하는 방법' 을 구글링했고
char값을 비교할시에는 아스키코드의 10진수로 변환하여 비교할 수 있다는 것을 알게되었다.
이는 '0'과 같은 형태 뿐만 아니라 'a'의 문자도 10진수로 반환하기 때문에 간단히 문제를 해결할 수 있었다.
ex) '0' == 48, '9' == 57
* 문제 설명에 '문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수' 라고 나와있는데
이 조건에 대한 코드 작성을 하지 않을 경우, 입출력 예시는 통과하지만 채점시 모든 테스트 케이스를 통과하지 못한다.
2. try-catch 구문을 통한 예외처리
문자열을 정수값으로 반환하여 비교할 수 있지 않을까? 라는 생각을 했고
이를 위해 방법을 찾던 중 정수값 반환 후 비교가 아니라 아에 예외처리를 해버리는 방법도 있었다.
class Solution {
public boolean solution(String s) {
if(s.length()==4 || s.length()==6){
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}
else return false;
}
}
출처
https://nirsa.tistory.com/355
https://www.techiedelight.com/ko/check-if-string-is-numeric-java/
'c.t > programmers' 카테고리의 다른 글
[프로그래머스] 체육복 (0) | 2022.09.03 |
---|---|
[프로그래머스] 서울에서 김서방 찾기 - Java (0) | 2022.08.21 |
[프로그래머스] 콜라츠 추측 - Java (0) | 2022.08.20 |
댓글