본문 바로가기
🍪 Ect/#Study

[99클럽 코테 스터디] 3일차 TIL 문자열

by 개발한 너굴씨 2024. 7. 25.
728x90

 

 

오늘의 문제는 프로그래머스

 

문자열 내 p와 y의 개수

 

 

문제 

 

 

문제 접근 및 풀이 과정

 

문제의 권장 풀이 시간은 30분이었고, 저는 10분이 걸렸습니다. 

 

오늘도 비교적 쉬운 문제가 출제 되었습니다. 

 

 

 

문제 접근 방식

대소문자가 섞인 문자열에서 'p'와 'y'의 개수를 세는 문제이기 때문에, 대소문자를 구분하지 않도록 하기 위해 'toUpperCase()'를 통한 모든 문자를 대문자로 변환하는 방식을 사용했습니다.

 

이 방법을 선택한 이유는 단순히 코드를 간결하게 만들기 위함이었습니다. 하지만 'p'와 'y'의 개수를 셀 변수 및 대문자로 변환된 문자열을 저장할 변수를 추가로 선언하는 과정에서 오히려 코드가 길어진 것 같습니다. 

 

 

 

문제 풀이

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

        String str = s.toUpperCase(); 
        int len = str.length(); 
        int cntP = 0;
        int cntY = 0; 
        
        for (int i = 0; i < len; i++) {
            if(str.charAt(i) == 'P') {
                cntP++;
            }
            if(str.charAt(i) == 'Y') {
                cntY++;
            }
        }
        
        if (cntP != cntY) {
            answer = false; 
        }
        
        return answer;
    }
}

 

 

문자열 s를 대문자로 변환하여 푼 이유는? 

 

문자열 s를 대문자로 변환한 이유는 대소문자를 구분하지 않고 'p'와 'y'의 개수를 쉽게 세기 위해서입니다. 이 방식은 모든 문자를 대문자 'P'와 'Y'로 통일하여 비교할 수 있습니다. 

 

 

반복문 설계 자세히 알아보기

 

반복문은 초기화 부분과 본문 부분으로 나뉩니다.

 

반복문 초기화

(int i = 0; i < len; i++)

 

위 코드에서 i는 0으로 초기화되어 i < len까지 반복되고 반복이 끝날 때마다 i값은 1씩 증가합니다.

 

 

반복문 본문 

if(str.charAt(i) == 'P') {
	cntP++;
            }
if(str.charAt(i) == 'Y') {
	cntY++;
            }

 

반복문 본문은 두 개의 조건문으로 구성 돼 있습니다. 

 

첫 번째 if문에선 i 번째 인덱스가 P인 경우 cntP의 개수를 증가시키고, 

 

두 번째 if문에선 i 번째 인덱스가 Y인 경우 cntY의 개수를 증가시킵니다. 

 

 

추가적으로 고려한 사항

문자열에서 대소문자가 섞여있는 경우, 특정 문자를 비교할 때 '||' 연산자를 사용하여 각각의 대문자와 소문자를 비교하는 방법도 있습니다.

 

예를 들어, if(s == 'P' || s == 'p')와 같이 조건을 작성하면, 대문자 'P'와 소문자 'p'를 모두 고려할 수 있습니다. 이러한 방법은 코드가 직관적으로 이해하기 쉬워지고, 특정 문자를 대소문자 구분 없이 처리할 때 유용할 수 있습니다.

 

 

 

 

 

이렇게 오늘 3일차 TIL을 작성해 보았습니다. 

 

 

 

728x90

댓글