[코딩테스트] 프로그래머스 - 항해99클럽 코딩테스트 스터디 1일차 : 문자열 내 p와 y의 개수

Co-Zi·2024년 11월 17일
0

99클럽TIL

목록 보기
7/15
post-thumbnail

해당 글은 항해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()
profile
한걸음 한걸음

0개의 댓글