본문 바로가기
Algorithm/프로그래머스 코딩테스트 문제풀이전략

[프로그래머스] Lv.1 문자열 내 p와 y의 개수

by 미네구스 2024. 4. 17.

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

 

프로그래머스

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

programmers.co.kr

 

내 코드

class Solution {
    boolean solution(String s) {
        boolean answer = true;

        if (!s.contains("p") && !s.contains("y")) {
            return true;
        }
        
        int pCount = 0;
        int yCount = 0;
        for(char c : s.toCharArray()) {
            c = Character.toLowerCase(c);
            if (c == 'p') pCount++;
            else if (c == 'y') yCount++;
        }

        return pCount == yCount;
    }
}

 

🎯 책 코드

class Solution {
    boolean solution(String s) {
        s = s.toLowerCase();
        
        int ps = s.length() - s.replace("p","").length();
        int ys = s.length() - s.replace("y","").length();
        return ps == ys;
    }
}

 

나는 contains를 통해서 p,y가 하나도 존재하지 않는 경우를 체크해줬고, 문자열을 순회하면서 각 갯수를 계산했다.

 

책 코드에선, 처음에 소문자로 다 바꾸고 replace() 메서드를 통해서 p문자를 제거한 길이, y문자를 제거한 길이를 비교하는 방법으로 풀었다.

 

replace 메서드를 통한 길이 비교는 생각하지 못한 방법이였다.

 

참고로, toLowerCase()의 시간 복잡도는 O(n), replace()의 시간 복잡도도 O(n)이라 시간 복잡도는 O(n)이 된다.

 

내 코드도 시간 복잡도는 O(n)이다.