코딩 테스트

프로그래머스 문자열 다루기 기본 Java (+12)

hyecozy 2022. 11. 29. 06:51

 

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

 

프로그래머스

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

programmers.co.kr

class Solution {
    public boolean solution(String s) {
        final String REG = "[0-9]+";
        boolean answer = false;
        
        if(s.length() == 4 || s.length() == 6){
            answer = true;
        }
        else{
            return false;
        }
        
        answer = (s.matches(REG))? true : false;
        
        return answer;
    }
}

정규식 쓰는 방법은 잘 모르지만 검색해서 써 본 경험이 몇 번 있기에 이번 문제에 적용해 보고 싶었다

 

우선 조건문은 2개

1. 파라미터값의 길이가 4 또는 6

2. 전부 숫자로 이루어져 있는가

 

변수는 안 만들고 싶어서 전부 return으로 퉁 치고 싶었으나 그렇게 되면 아예 메소드 자체를 종료시켜서 2번 조건문에 다다를 수 없기 때문에 변수가 꼭 필요하다고 판단했다.

1번 조건문이 true면 2번 조건에도 충족하는지 물어봐 줘야 하는데 그 전에 종료 시키면 답을 낼 수가 없다.

하지만 1번 조건문부터 false인 경우 2번 조건문은 안 들어봐도 되기 때문에 return을 넣었다

 

2번 조건문은 전부 숫자로 이뤄져 있는지 체크를 해야 했는데 정규식이 떠올라서 썼다. 그리고 삼항연산자를 써 보고 싶어서 또 썼다! (삼항 연산자 참일 때 거짓일 때 결과값을 적는 부분에 return은 쓸 수 없었다. 아마 저 자리 자체가 반환값의 자리이고 메소드를 끝내기 위한 return은 변수에 들어가는 값이 아니기 때문에 그런 것 같다! 생각해 보니 당연한 거네)

 

➡️ 다른 사람들 풀이에도 정규식을 사용한 분이 많았다

그중 연산자의 성질을 잘 이용한 풀이가 있어서 감탄하며 들고오기...

 return (s.length() != 4 && s.length() != 6) || (s.split("[0-9]").length > 0) ? false:true;

OR은 둘 중 하나가 참이어도 참의 결과를 낸다는 것을 이용한 식이다

 

근데 내가 보기에는 조금 이해가 빨리 되지 않아서 한번 고쳐 보았다

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

이래도 충분히 테스트는 통과 되더라 하하

 

근데 삼항연산자를 쓴다고 컴파일 속도가 더 빨라지는 건 아니라고 한다..

더 짧은 코드가 좋은 코드라는 편견이 있어서 더 좋을 줄 알았는데 그렇지도 않나 보다

 

어쨌든 이 문제는 처음으로 12점을 얻어서 기분이 좋았다