반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12916?language=java
1) 내가 구현한 코드
class Solution {
boolean solution(String s) {
boolean answer = false;
int pCnt = 0;
int yCnt = 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(yCnt == pCnt) answer = true;
return answer;
}
}
2) 오늘의 학습 키워드
- 문자열 순회 및 문자 개수 카운팅
- 대소문자 구별하지 않는 문자 비교
- Java 문자열 메서드 (toLowerCase, toUpperCase, chars)
- String.chars()
- 자바에서 String 객체에 포함된 각 문자를 정수형 스트림(IntStream)으로 반환하는 메서드
- 이 스트림을 사용하면 문자열의 각 문자를 쉽게 순회하고,
- 특정 조건을 만족하는 문자만 필터링하거나 카운팅 가능
- ex. filter(), count(), forEach() 같은 스트림 연산을 조합하여 문자열을 효율적으로 다룰 수 있게 해줌
- 반복문 + String.charAt(int index)을 통해 하나씩 순회 가능
3) 공부한 내용 정리
이 문제는 문자열에서 특정 문자의 개수를 비교하여 조건에 따라 참 또는 거짓을 반환하는 문제이다.
주요 학습 포인트는 다음과 같다.
- 문자 개수 세기
- 문자열 내 특정 문자('p'와 'y')의 개수를 비교하기 위해 문자열 전체를 순회하면서 해당 문자의 개수를 카운팅한다.
- 대소문자 구별 없이 처리하기
- 대문자와 소문자를 구별하지 않도록 전체 문자열을 소문자나 대문자로 변환하여 개수를 비교한다.
- 이를 위해 toLowerCase() 또는 toUpperCase() 메서드를 사용할 수 있다.
- 문자열 메서드 활용
- Java에서는 toLowerCase()로 소문자로 변환하고 chars().filter()를 이용해 특정 문자의 개수를 쉽게 세는 방법을 사용할 수 있다.
4) 문제 해결 과정
- 문제 접근:
- 문자열 s를 소문자로 변환하여 'p'와 'y'의 개수를 구한다.
- p와 y의 개수가 같다면 true, 다르면 false를 반환하는 조건을 만든다.
- 만약 p와 y가 모두 없는 경우에도 true를 반환하도록 처리한다.
- 문제 해결 시도:
- toLowerCase로 문자열을 소문자로 변환하여 대소문자 문제를 해결한다.
- chars() 메서드를 사용하여 p와 y 문자의 개수를 필터링하고 카운팅한다.
- 추가 구현 코드:
public class Solution {
public boolean solution(String s) {
String lowerCaseStr = s.toLowerCase();
long countP = lowerCaseStr.chars().filter(ch -> ch == 'p').count();
long countY = lowerCaseStr.chars().filter(ch -> ch == 'y').count();
return countP == countY;
}
}
5) 오늘의 회고
- 문제점
- 문자열 내 문자 개수를 세는 메서드에 익숙하지 않아 다양한 시도를 했다.
- 시도한 방법
- 처음에는 단순 for문을 통해 하나씩 조건을 검사하며 카운팅하는 방식을 시도했으나,
- chars()를 사용한 필터링 방식이 더 깔끔하고 효율적이라는 것을 알게 되었다.
- 새롭게 알게 된 것
- chars().filter()를 활용하면 특정 문자의 개수를 빠르게 세는 방법을 익혔다.
- 내일 학습 목표
- 다양한 문자열 처리 메서드, 스트림 활용법 더 깊게 학습하기
Q1: 만약 문자열을 대문자로 변환해서 개수를 세는 방식과 비교할 때, 성능 차이가 있을까?
Q2: chars().filter() 외에도 특정 문자의 개수를 셀 수 있는 다른 방식은 어떤 것들이 있을까?
Q3: 이 문제를 해결할 수 있는 또 다른 언어의 코드는 어떻게 다를까?
6) 추가 문제
미들러 - 게임
https://www.acmicpc.net/problem/1072
챌린저 - 경로찾기
https://www.acmicpc.net/problem/11403
반응형
'coding_test' 카테고리의 다른 글
[99클럽 4기 코테 스터디 TIL 3일차] 문자열 나누기 (0) | 2024.10.30 |
---|---|
[99클럽 4기 코테 스터디 TIL 2일차] 크기가 작은 부분 문자열 (0) | 2024.10.30 |
[코딩테스트] 4. 프로그래머스 코딩테스트입문 (Day5, Day6) 코딩 기초 트레이닝 (Day1, Day2) (0) | 2024.10.18 |
[코딩테스트] 3. 프로그래머스 코딩테스트입문 (Day1 ~ Day4) (1) | 2024.10.17 |
[코딩테스트] 2. 약수의 갯수와 덧셈 (with 자바) (0) | 2024.10.17 |