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

 

 

 

문제

정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 메서드를 완성하시오

만약 그러한 정수가 없다면, -1이 담긴 배열을 return 하시오

 

 

 

나의 답안

 

  1. p와 y를 count 할 변수를 각각 1개씩 생성

  2. for문과 if문을 사용해 한 글자씩 대소문자 및 해당 문자 일치 여부 확인하여
    일치하는 경우 count변수에 1씩 더함

  3. 삼항연산자로 true / false 리턴

 

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int countP = 0;
        int countY = 0;
        
        for (int i=0; i<s.length(); i++) {
            if (s.charAt(i) == 'p' || s.charAt(i) == 'P') {
                countP++;
            } else if(s.charAt(i) == 'y' || s.charAt(i) == 'Y') {
                countY++;
            }
        }
        
        return countP==countY ? true : false;
    }
}

 

 

모범 답안

 

class Solution {
    boolean solution(String s) {
        s = s.toLowerCase();
        int count = 0;

        for (int i = 0; i < s.length(); i++) {

            if (s.charAt(i) == 'p')
                count++;
            else if (s.charAt(i) == 'y')
                count--;
        }

       return count==0;
    }
}

 

    배운 점

  • toLowerCase() 메서드를 통해 모두 소문자로 통일시킴
  • count변수를 1개만 생성해도 증감연산자(++,--)를 활용하여 p와 y 개수 비교 가능
  • count==0 을 리턴하면 삼항연산자 사용할 필요 없이 true / false를 반환할 수 있다

 

 

 

위 세가지 모두 아이디어가 좋아 배워야 할 점이다.

무언가 만들 때 어떻게 하면 효율적이고 간결할지,

좀 더 다른 방향으로 생각해야 한다는 것을 또 한 번 느꼈다.