본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] 문자열 다루기 기본 문제 풀이 및 설명 - 자바[Java]

by 레일라오리덕 2020. 5. 15.
728x90

https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

https://programmers.co.kr/learn/courses/30/lessons/12918

문제

문자열 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라고 지정할 수 있게 됩니다.

 

728x90
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]

 

728x90

댓글