해당 글은 항해99 클럽 코딩테스트 스터디에서 진행된 1일차(20241028) 비기너 문제에 대한
TIL(Today I Learned) 내용입니다.
문제 출처) https://school.programmers.co.kr/learn/courses/30/lessons/12916
이 문제에서 주목해야할 부분은 다음과 같다.
조건 1
대문자와 소문자가 섞여있는 문자열 s
개수를 비교시 문자와 소문자는 구별하지 않는다.
조건 2
s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return
'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴
-> 결국, 마지막 경우도 "'p'의 개수와 'y'의 개수를 비교해 같으면 True"에 속한다.
조건1 고려사항
String 클래스의 toUpperCase() 또는 toLowerCase() 활용하기
s = s.toLowerCase();
s = s.toUpperCase();
조건2 고려사항
(1) 문자열 안의 한글자 한글자에 대해서
(2)'p' 또는 'y'인지 확인하고 그 개수를 비교
방법1) toCharArray()로 문자열을 char배열로 만든 후 -> for문으로 문자 비교 및 세기
방법2) for문 안에서 charAt(idx) 활용하여 비교하고 세기
참고 사항
1) String과 char에서의 ==와 equals() 차이
참고) https://olppaemmit.tistory.com/234
char는 원시데이터유형
-> 스택에 그 값을 저장한다. (== 할 때의 비교값)
String은 객체
-> 스택에 메모리주소(힙에 객체를 저장한 주소)를 갖는다.(== 할 때의 비교값(메모리주소) : 참조비교)
-> 힙에 객체를 저장한다. (equals() 할 때의 비교값(객체 자체) : 내용 비교)
2) String끼리 대/소문자 관계없이 같은지 비교하기 위해서는?
-> String 클래스의 equalsIgnoreCase() 활용
s1.equalsIgnoreCase(s2)
3) 또 다른 답안 : 람다식 표현 활용
s = s.toUpperCase();
return s.chars().filter(e -> e=='P').count() == s.chars().filter(e -> e=='Y').count()