[99클럽 코테 스터디] 3일차 TIL - 문자열 내 p와 y의 개수

Hoxy?·2024년 7월 25일
0

99클럽 코테 스터디

목록 보기
3/42
post-thumbnail
post-custom-banner

오늘의 학습 키워드

  • 문자열 내 p와 y의 개수

공부한 내용 본인의 언어로 정리하기

import java.util.ArrayList;
import java.util.List;

class Solution {
    boolean solution(String s) {
        
        String lowercaseStr = s.toLowerCase();
        
        char[] charArray = lowercaseStr.toCharArray();
      
        List<Character> pList = new ArrayList<>();
        List<Character> yList = new ArrayList<>();

        for (char c : charArray) {
            if (c == 'p') {
                pList.add(c);
            } else if (c == 'y') {
                yList.add(c);
            }
        }

        return pList.size() == yList.size();
    }
}

오늘의 회고

오늘 문제는 py의 개수를 구하면 되는 문제이다
코드 작성을 하기 전에 어떻게 하면 좋을지 고민했다
입력받은 문자열을 대문자 또는 소문자로 변환을 해주고
문자열을 for문을 이용해서 배열로 만들어 준 후
전체 배열 내의 p만 추출해서 또 다른 하나의 배열로 만들고
전체 배열 내의 y만 추출해서 또 하나의 배열로 만들어 준 후
배열의 길이를 비교해서 같다면 true 틀리다면 false를 출력하면 되겠다.

문자열의 대문자를 소문자로 변환하는 방법을 까먹어 검색했다
String을 소문자로 변환하려면 toLowerCase()를 사용하면 된다고 한다.

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        
		// 문자열을 소문자로 변환
        s = s.toLowerCase();

for문을 이용한 배열은 1일차 문제에 있었으므로 똑같이 사용하면 된다.

// 문자열을 문자 배열로 변환
char[] charArray = lowercaseStr.toCharArray();

// p와 y를 저장할 리스트 생성
List<Character> pList = new ArrayList<>();
List<Character> yList = new ArrayList<>();
 

문제는 여기서 였다 하나의 문자만 추출하려 했지만 추가의 과정이 필요했다
전체 배열에서 해당 문자가 있는지 비교한다
해당 p가 있다면 pList 배열에 y가 있다면 yList의 배열에 추가해준다.

// 문자 배열을 순회하며 p와 y 찾기
for (char c : charArray) {
    if (c == 'p') {
        pList.add(c);
    } else if (c == 'y') {
        yList.add(c);
    }
}
 

그리고 pysize가 같다면 true 다르다면 false를 출력해준다.

// p와 y의 개수(리스트의 길이) 비교
return pList.size() == yList.size();

size()를 사용한 이유는 문자열이 아니기 때문에 length를 사용할 수 없기 때문이다.


완성 후에 배열의 size를 비교 해야한다면 굳이 배열로 만드는 과정이 필요할까 생각했다.
그래서 다시 한개의 답을 더 만들었다.
배열의 길이를 비교해야 한다면, 문자열 내에서 존재하는 특정 문자의 갯수만 가지고 있으면 되지 않을까 생각했다.
그리하여 배열 대신 객체를 만들어주었다.

int pCount = 0;
int yCount = 0;

이렇게 되면 문자열 자체로 배열로 만들 필요가 없어진 것이다.
이제 바로 문자열을 순회하면서 py를 찾아 p가 있다면 pCount에 1을 더하고 y가 있다면 yCount에 1을 더하면 된다.

 // 문자열을 순회하며 'p'와 'y'의 개수를 세기
for (char c : s.toCharArray()) {
    if (c == 'p') {
        pCount++;
    } else if (c == 'y') {
        yCount++;
    }
}

전체를 순회하면 되기때문에 forEach문을 사용하였고 s문자열을 문자 배열로 전환해 각 문자가 c와 대입하게 된다.
그래서 배열속의 문자를 순회중 p가 있으면 pCount의 값에 +1을 y가 있으면 yCount의 값에 +1을 해주게 된다.

이제 마지막으로 pCountyCount를 비교해서 리턴해주면 된다.
이렇게 하면 pCount == yCount 라면 truepCount != yCount라면 falsereturn 해주게 된다.

return pCount == yCount;

전체 코드는 이렇다

class Solution {
    boolean solution(String s) {
        // 문자열을 소문자로 변환
        s = s.toLowerCase();

        int pCount = 0;
        int yCount = 0;

        // 문자열을 순회하며 'p'와 'y'의 개수를 세기
        for (char c : s.toCharArray()) {
            if (c == 'p') {
                pCount++;
            } else if (c == 'y') {
                yCount++;
            }
        }

        // 'p'와 'y'의 개수 비교
        return pCount == yCount;
    }
}

문제

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

profile
하나부터 열까지 모든 것이 궁금한 개발자 취준생
post-custom-banner

0개의 댓글