Hayden's Archive

[알고리즘] 프로그래머스 : 문자열 내 p와 y의 개수 본문

Algorithm

[알고리즘] 프로그래머스 : 문자열 내 p와 y의 개수

_hayden 2020. 5. 13. 21:21

알고리즘 문제 출처 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/12916

 

프로그래머스

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

programmers.co.kr

 


내가 작성한 코드

처음에는 String을 toLowerCase()를 통해 소문자로 모두 바꾸고 toCharArray()로 char[] 배열로 바꿨다. 그 뒤 char형을 String형으로 바꿔서 문자 "p"와 문자 "y"와 비교하였고 각각 countP와 countY에 저장하여 수를 비교해서 풀었다. 

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        char[] sList = s.toLowerCase().toCharArray();
        int countP = 0;
        int countY = 0;
        for(char a : sList) {
            Character cha = a;
            if(cha.toString().equals("p")) {
                countP += 1;
            }
            if(cha.toString().equals("y")) {
                countY += 1;
            }
        }
        if(countP != countY) {
            answer = false;
        }
        return answer;
    }
}

 

그런데 문제를 풀고 나니 꼭 이렇게 풀 필요가 있을까 싶었다. 그래서 다시 풀어봤다.

String 클래스의 charAt() 메소드를 활용하면 문자열에서 n번째 인덱스의 char값을 반환할 수 있다. String을 굳이 char[] 배열로 바꾸지 않아도 된다는 소리다. 그리고 작은따옴표를 써서 == 연산자를 통해 char값끼리 비교하면 된다. 그리고 count는 굳이 countP, countY로 나눌 것 없이 count 변수 하나로 써서 더해가고 빼가서 0인지 아닌지만 따져주면 된다.

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        s = s.toLowerCase();
        int count = 0;
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == 'p') {
                count++;
            }
            if(s.charAt(i) == 'y') {
                count--;
            }
        }
        if(count != 0) {
            answer = false;
        }
        return answer;
    }
}

 

다른 사람의 코드를 살펴보니 이런 코드가 있었다. 이걸 람다라고 하는데 나도 들어보기만 하고 제대로 공부해본 적은 없다. 나중에 람다도 공부해봐야겠다.

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

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

 

관련 :

String 클래스의 메소드 https://kutar37.tistory.com/entry/%EC%9E%90%EB%B0%94-String-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%9D%98-%EB%A9%94%EC%86%8C%EB%93%9C

문자열 비교 https://library1008.tistory.com/37

참고 - 자바의 Wrapper 클래스 https://peulblog.tistory.com/20