Problem Solving/Algorithm Concepts

[Programmers] Level1 문자열 내 p와 y의 개수

대범하게 2022. 8. 2. 14:51
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/12916

* 문제 설명

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

 

대문자, 소문자가 섞여있는 문자열 s
 
s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return하는 solution 완성하시오.
'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴
단, 개수를 비교할 때는 대문자와 소문자를 구별하지 않음
 

* 입출력 예

s answer
pPoooyY
true
Pyy
false

 

* 소스코드1

1. 문자열의 길이만큼 연산 str.length()

for문을 사용해서 문자열을 길이만큼 연산하도록 한다.for(int i=0; i<str.length(); i++)

 

2. 한 문자씩 뜯어보기

그 다음 중요한 점은 문자를 하나씩 보기 위함이다.

문자열 s에서 p의 개수와 y의 개수를 비교하기 때문에 문자를 하나씩 뜯어볼 필요가 있다.

 

방법은 두 가지!

1) String에 toCharArray()를 사용해 char형 배열 만들기

// toCharArray()로 문자열을 문자형 배열로 만들기
char[] ch = s.toCharArray();

// 배열요소 이용하여 문자 다루기
ch[i] == 'p';

2) String에 charAt()을 사용해 지정된 위치 알려주는 방법

 

* char charAt(int idex)

지정된 위치(index)에 있는 문자를 알려준다. (index는 0부터 시작)/문자 한 개 반환

// 예시
   Stinrg s = "Hello";
   Stinrg n = "0123456";
   char c = s.charAt(1);
   char c2 = n.charAt(1);

   결과) c = 'e';
   c2 = '1';

 

 

3. 대소문자 구별하지 않기 때문에 논리연산자 || 를 사용해 두 가지 경우 모두 고려하기

if(s.charAt(i)=='p'|s.charAt(i)=='P'){
	p++;
}
else if(s.charAt(i)=='y'|s.charAt(i)=='Y'){
    y++;
}

* 조건에서 '단, 개수를 비교할 때는 대문자와 소문자를 구별하지 않는다'라고 하여

다 대문자로 바꿔도 되고, 다 소문자로 바꿔도 문제 없을거라 생각하여

소문자를 다 대문자로 바꾸어 문제를 풀었는데

그렇게 되면 조건에서 소문자만 계산하기 때문에 다른 예시가 나오게 되면 정답률이 100%가 나올 수 없게 된다.

 

 

4. 리턴 값에 맞게 조건 충족시키기

// 방법 1

if(p != y) {
	answer = false;
}

return answer;


// 방법 2

if(p + y == 0){
    return true;
}

return p == y;

 

최종 코드)

// 최종코드

import java.util.*;
public class Solution {
    public boolean solution(String str) {
        boolean answer = true;
        int p = 0, y = 0;
        for(int i= 0; i < str.length(); i++) {
            if(str.charAt(i)=='p' || str.charAt(i) == 'P') { // 대소문자 구별 x
                p++;
            }
            else if(str.charAt(i)=='y' || str.charAt(i) == 'Y') { // 대소문자 구별 x
                y++;
            }       
        }

        if(p != y) {
            answer = false;
        }

        return answer;
    }

    public static void main(String[] args) {
        Solution T = new Solution();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}


//pPoooyY
//true
//Pyy
//false