프로그래머스 문자열 다루기 기본 Java (+12)
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점을 얻어서 기분이 좋았다