[Java] 자바 알고리즘, "문자열 다루기 기본"

문자열 다루기 기본

문제 설명

문자열 s의 길이가 4혹은 6이고, 숫자로만 구성되있는지 확인해주는 함수, solution을 완성하세요.

예를들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.


제한 사항

s는 길이 1 이상, 길이 8 이하인 문자열입니다.


입출력 예

 s

return 

a234 

false 

1234 

true 


나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
  public boolean solution(String s) {
      boolean answer = true;
          
          char[] temp = s.toCharArray();
          if(temp.length!=4 && temp.length!=6){
              return false;
          }
          for(int i =0; i<temp.length; i++) {
              if(!(temp[i] >='0' && temp[i] <='9')) {
                  answer = false;
                  return answer;
              }
          }
          return answer;
  }
}
cs


일단 길이가 4나 6이 아닌경우 바로 false를 리턴하게 하였습니다. 그리고 for문을 돌면서 문자코드값이 '0' ~ '9' (숫자의 문자코드) 범위내에 있지 않으면 문자로 판단하고 false를 리턴하게 했습니다. 이 과정을 모두 통과한 문자열 s만이 true를 리턴할 수 있습니다.

포인트는 문자코드 '0' ~ '9' 값이 모두 일련의 문자코드로 나타난다는 것입니다.( 예, 0 : 48, 1 : 49, ... 9 : 57 )


다른사람의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
  }
}
cs

이 분은 try catch 문을 써서 해결하신 모습입니다. parseInt해서 예외가 발생하면 return문으로 이어지도록 하신것 같습니다. 이 부분을 소화하려면 Integer.parseInt()안의 매개변수로 들어가는 값에 문자열이 있으면 NumberFormatException이 발생한다는 사실을 인지하고 있어야 가능했던 풀이방법 같습니다. ^^


1
2
3
4
5
6
7
8
import java.util.*;
 
class Solution {
  public boolean solution(String s) {
        if (s.length() == 4 || s.length() == 6return s.matches("(^[0-9]*$)");
        return false;
  }
}
cs

이 분은 정규표현식을 이용해서 해결하신 모습입니다. matches의 매개변수로 정규표현식을 넣으면 문자열 s 가 매개변수정규표현식에 부합되는 값이라면 true를, 아니면 false를 반환하는 메소드인 것 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
  public boolean solution(String s) {
      boolean answer = false;
      if(s.length() == 4 || s.length() == 6 ){
        int i;       
        for(i=0;i<s.length();i++){
           if(!Character.isDigit(s.charAt(i))){
               break;
           }
         }
        if(i==s.length()){
            answer =true;
        }
      }
      return answer;
  }
}
cs

저는 이부분에 대해서 잘 몰랐는데 Character 클래스에 isDigit()이라는 메소드가 내장되어있더라구요. 안에 '1' 을 넣으면 true, 'a' 를 넣으면 false가 나오는 것으로 보아 숫자와 문자데이터를 구분해주는 메소드같습니다. 

★★★

알고리즘을 하면서 다른사람의 풀이를 보고 확실하게 더 얻어가는 부분이 이런거라고 생각합니다. 자기만의 풀이만 풀고 땡!! 치는 것이 아닌 다른사람은 어떻게 문제를 해결했는지를 통찰하고 저 자신도 다음의 알고리즘을 풀때 한층 더 새로운 방법에 대해서 경험을 한다는 것이 알고리즘을 공부하면서 좋은 점이라고 생각합니다.

댓글

Designed by JB FACTORY