TIL

프로그래머스 코딩테스트 연습_문자열 내 p와 y의 개수 Java

봄봄로그 2023. 11. 15. 18:11

가끔 내 실력을 모르겠다.. 레벨 2가 쉽다가도 레벨 1이 가끔 어려워서 내 자존감을 깎는다..

그럴때면 정답률이 높은 문제를 풀면서 다시 재미를 느끼게 해줘야한다.

아무튼 이번에 푼 문제는 얼핏보면 for문을 돌려 카운팅을 해주면 되는 문제 같지만 그 방식으로 풀지 않아서 블로그에 남겨보려 한다. 

 

  • 문자열 내 p와 y의 개수

https://school.programmers.co.kr/learn/courses/30/lessons/12916?language=java

 

프로그래머스

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

programmers.co.kr

 

문제를 보면 p,P의 갯수와 y,Y의 갯수를 비교한다.

그래서 처음엔 String문자열을 toArray를 이용하여 char로 하나씩 비교하고 카운팅한 갯수를 비교해보려고 했다.

이렇게 되면 변수를 두개나 선언해야 되고 for문도 보기 싫어진다....

 

예전에 푼 문제 중에 길이의 차로 구했던 문제가 있어 한번 적용해보았다.

 

class Solution {
    boolean solution(String s) {
        
        return s.replaceAll("[^pP]", "").length() == s.replaceAll("[^yY]", "").length();
    }
}

 

 

이햐..

마음에 드네요🫶 모처럼만에 정말 마음에 드는 간결한 코드다ㅠㅠ 가급적 for문과 if를 지양하고 싶다..!

 

 

💡풀이

정규식을 사용하여 p,P만 남겨둔 문자열의 길이와 y,Y만 남겨둔 문자열의 길이를 비교하여 같으면 true를 반환한다.

네개의 문자가 모두 없어도 true가 반환도 성립된다.

 

💡 다른풀이로 문자열을 toUpCase나 toLowCase를 해서 비교하면 정규식이 더 짧아질 것 같다.

또, 람다를 사용해서도 한줄로 끝낼 수 있다.

class Solution {
    boolean solution(String s) {
        s = s.toUpperCase();

        return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
    }
}