99클럽 코테 스터디 1일차 TIL + 문자열 내 p와 y의 개수

sun·2025년 1월 13일
0
post-thumbnail

오늘의 학습 키워드 및 문제

#문자열
[프로그래머스] 문자열 내 p와 y의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/12916

문제풀이

문제를 보았을 때 반복문을 사용하여 문자열의 문자 각각을 비교하여 p와 y의 수를 세면 될 것이라고 생각했다.
바로 charAt()을 사용하여 풀어야겠다고 생각했다.
그런데 문득 charAt은 문자열이 아닌데 equals가 가능한지 헷갈렸다.

char는 기본 데이터 타입이기 때문에 ==로 비교하는 것이 옳다.
equals는 객체의 내용을 비교하는 데에 사용하기 때문에 char에 사용할 수 없다.

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int yCnt = 0;
        int pCnt = 0;

        for(int i=0; i<s.length(); i++) {
            if(s.charAt(i) == 'p' || s.charAt(i) == 'P') {
                pCnt++;
            } else if (s.charAt(i) == 'y' || s.charAt(i) == 'Y') {
                yCnt++;
            }
        }
        
        if (pCnt != yCnt) {
            answer = false;
        }

        return answer;
    }
}

다른방법

1. 대문자 변환 or 소문자 변환

문제를 풀고난 후 'p'와 'P'를 따로 검사를 하는 방법보다 소문자나 대문자 한쪽으로 모두 변환 후 둘 중 하나만 검사하는 것이 더 괜찮은 방법일 것 같다는 생각이 들었다. (성공)

toUpperCase() - 대문자 변환
toLowerCase() - 소문자 변환

2. 향상된 for문 사용

기본 for문을 사용하는 것이 아닌 향상된 for문을 사용하여 가독성을 더 높일 수 있다. (성공)

toCharArray() - String 문자열을 char[] 배열로 변환

3. "p와 y의 갯수가 같다"는 말의 진정한 의미

이건 머리를 탁 치는 방법이었다. 정말 나는 생각지도 못한..
문제에는 이렇게 나와있었다.
"s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True"
"'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴"
이 문장으로 알 수 있는 것은 'p'의 갯수 - 'y'의 갯수 = 0 이라는 것이다. 그 반대도 성립
즉, p의 갯수를 담는 변수와 y의 갯수를 담는 변수 각각 있는 것이 아닌
하나의 변수로 p가 있을 때는 +를 y가 있을 때는 -를 하여 결과가 0이 되면 true를 반환하면 되는 것이다! 0.0 (성공)

int count = 0;
p 있으면 ++ / y 있으면 --
결과가 0이면 갯수가 같거나 모두 없다는 뜻


공부한 내용정리

  • char는 문자열이 아니고 객체도 아니므로 equals를 지원X
  • String에는 toUpperCase()와 toLowerCase() 함수를 지원
  • String에는 toCharArray()인 char 배열 타입으로 변환해주는 함수를 지원
  • 두 갯수가 같다는 것은 차의 결과가 0이라는 뜻
profile
Please, Steadily

0개의 댓글

관련 채용 정보