문제
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.
제한 사항
- s는 길이 1 이상, 길이 8 이하인 문자열입니다.
결괏값 예시
s | return |
"a234" | false |
"1234" | true |
기본 제공 틀
class Solution {
public boolean solution(String s) {
boolean answer = true;
return answer;
}
}
풀이 [Java]
이번 문제는 문자열 다루기 기본 문제인데요, 말 그대로 기본 문제인 만큼, 크게 어렵지 않은 문제입니다. 하지만, 어떤 부분을 잘못 짜면 원하지 않는 결괏값을 얻을 수 도 있는데요, 그 부분에 대해서는 맨 마지막에 언급해 볼 예정입니다 :D
우선, 우리는 들어오는 문자열 s의 길이가 4 혹은 6인 것을 확인해야합니다.
그러기 위해서 아래와 같이 s.length() 메서드로 문자의 길이를 확인하였는데요, 같지 않다는!= "비교 연산자"를 사용하여 값이 같지 않을 경우엔 answer의 불린 값을 false로 설정해주었어요.
만약, 문자의 길이가 4 혹은 6이면 아래의 else 구문으로 가게 되어 for문을 돌게 되는데요, 이때에 s라는 문자의 길이만큼 돌면서 charAt이라는 메서드로 특정 위치에 있는 문자열을 추출하였습니다.
이때 각각의 문자를 아스키코드를 이용하여 비교해보았는데요, 0~9의 숫자가 아닌 즉, 0보다 작거나 9보다 큰 아스키코드인 경우에는 문자인 String이 들어간 것으로 간주할 수 있기 때문에 범위를 벗어난 문자열이 확인된 경우엔 answer=false라고 지정할 수 있게 됩니다.
class Solution {
public boolean solution(String s) {
boolean answer = true;
if(s.length()!=4 && s.length()!=6){
answer= false;
}else{
for(int i=0; i<s.length();i++){
if(s.charAt(i)<'0'|| s.charAt(i) >'9'){
answer= false;
}
}
}
return answer;
}
}
다른 사람의 생각 [Java]
아래는 다른 사람들의 생각을 엿볼 수 있는 코드입니다. 코딩은 잘 짜내어 문제를 해결하는 것도 중요하지만, 다른 사람이 짠 코드를 보며 여러 가지 방법에 대해 알게 되고 연구하는 것 또한 중요하다고 생각합니다.
우선 보시다시피, s라는 문자의 길이를 비교하는 부분은 저와 같았고요, 나머지 부분에서 큰 차이를 보입니다.
코드가 훨씬 간결해 보이는 것도 느껴지네요! (부러워요...)
저 같은 경우에는 아스키코드를 이용하여 문자가 있는 지를 체크하였는데, 다른 분들은 s라는 문자를 Int로 변형할 수 있는지 체크했네요!
이 부분을 자세히 설명해보자면, 예를 들어 들어온 s라는 문자가 1234라는 문자였다면, 이 String을 int형으로 변환을 해도 큰 문제가 일어나지 않을 거예요.
그래서 새로운 int인 x를 선언하여 그 값을 담으려고 시도했을 때, 어떠한 에러도 발생하지 않을 거고요!
숫자가 아닌 String을 Integer.parseInt를 사용하여 숫자로 변환하려고 할 때 우리가 흔히 마주칠 수 있는 NumberFormatException을 적절하게 아주 잘 활용한 것으로 볼 수 있습니다.
그래서 결론은! int형으로 변환된 경우, s라는 문자는 모두 숫자를 포함하기에 true를 반환하고, NumberFormatException이 발생한 경우는 숫자가 아닌 문자가 들어가 있는 경우라고 볼 수 있으므로 false를 반환하도록 설계한 것입니다.
class Solution {
public boolean solution(String s) {
if(s.length() == 4 || s.length() == 6){
try{
int x = Integer.parseInt(s);
return true;
} catch(NumberFormatException e){
return false;
}
}
else return false;
}
}
채점 결과 [Java]
'알고리즘 스터디 > 프로그래머스 스킬체크 레벨 1(끝)' 카테고리의 다른 글
[프로그래머스 스킬체크 레벨 1] 시저 암호 문제 풀이 및 설명 - 자바[Java] (0) | 2020.05.19 |
---|---|
[프로그래머스 스킬체크 레벨 1] 프로그래머스 스킬체크 레벨 1 합격, 0통과! - 자바[Java] (0) | 2020.05.16 |
[프로그래머스 스킬체크 레벨 1] 이상한 문자 만들기 문제 풀이 및 설명 - 자바[Java] (0) | 2020.05.14 |
[프로그래머스 스킬체크 레벨 1] 짝수와 홀수 문제 풀이 및 설명 - 자바[Java] (0) | 2020.05.13 |
[프로그래머스 스킬체크 레벨 1] 핸드폰 번호 가리기 문제 풀이 및 설명 - 자바[Java] (0) | 2020.05.12 |
댓글