12918 문자열 다루기 기본

알파로그·2023년 3월 12일
0

✏️ 문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

✏️ 제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

✏️ 문제 풀이

📍 1차 시도 - 실패

s 의 대소문자 알파뱃을 제거하고,

s 와 s1 의 길이를 비교해서 다르면 false 를 출력하게 만들었지만 4개의 테스트에서 통과하지 못했다.


아무리 봐도 코드상에 문제는 없어보여서 문제를 다시 꼼꼼하게 읽어보니

s 에 알파뱃 여부만 확인하는 것이 아닌 4 또는 6 의 길이가 맞는지도 확인해야 되는 문제였다.

class Solution {
    public boolean solution(String s) {
        boolean answer = true;
        
        String s1 = s.replaceAll("[a-z,A-Z]", "");

        if (s.length() != s1.length()) answer = false;
        
        return answer;
    }
}

📍 2차 시도 - 성공

문제를 다시 확인한 후 조건문으로 한번 더 필터링을 해주니 테스트가 통과 되었다.

아주 쉬운 문제지만 문제를 잘못 읽어서 통과하지 못했다.

문제를 차근 차근 파악할 수 있도록 하자.

class Solution {
    public boolean solution(String s) {
        boolean answer = false;
        
        String s1 = s.replaceAll("[a-z,A-Z]", "");

        if (s.length() == 4 || s.length() == 6) {
            if (s.length() == s1.length()) answer = true;
        }
        
        return answer;
    }
}

✏️ 다른사람의 풀이

📍 풀이 1.

s 를 int 로 케스팅 해서 성공하면 true 를 반환,

실패하는 false 를 반환하는 방식으로 문제를 해결했다.


알고리즘 테스트에서 try / catch 문을 사용한다는 생각을 전혀 하지 못했기 때문에 정말 창의적으로 느껴젔다.

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;
  }
}

📍 풀이 2.

matches 문법을 사용해 0-9 의 숫자만 매칭될 경우 true 를

아닐경우 false 를 반환 시키는 창의적인 방법이다.

import java.util.*;

class Solution {
  public boolean solution(String s) {
        if (s.length() == 4 || s.length() == 6) return s.matches("(^[0-9]*$)");
        return false;
  }
}

📍 풀이 3.

알파벳을 제거하는 것이 아닌 split 를 사용해 숫자를 제거해 0 보다 클 경우 flase,

0 일경우 true 를 반환하는 방식이다.

class Solution {
  public boolean solution(String s) {
    return (s.length() != 4 && s.length() != 6) 
                || (s.split("[0-9]").length > 0) 
                ? false:true;
  }
}

✏️ 사용된 Method & Class

🔗 matches

🔗 split

🔗 replaceAll

profile
잘못된 내용 PR 환영

0개의 댓글