TODAY TIL

99 클럽에서 진행하는 코딩 테스트 스터디 4기를 오늘부터 시작하게 되었습니다.

그리하여서 매일 99 클럽에서 제시해준 문제를 풀고 공부 내용이나 문제 풀이를 정리 하려고 합니다.

오늘의 문제는  프로그래머스에 있는 문자열 내 p와 y의 개수 였는데요.

아직 알고리즘이 익숙하지 않은 초보지만 열심히 공부해보겠습니다.

 

문자열에서 'p'와 'y'의 개수 비교하기

문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. 이 문자열에서 'p'의 개수와 'y'의 개수를 비교해 두 개수가 같으면 True, 다르면 False를 반환하는 함수를 작성해야 합니다. 만약 'p'와 'y' 모두 문자열에 없을 경우, 결과는 항상 True를 반환해야 합니다. 이때, 대소문자를 구별하지 않고 비교하는 것이 포인트입니다.

예시

  • 입력 "pPoooyY" ➔ 출력 True
  • 입력 "Pyy" ➔ 출력 False

제한사항

  • 문자열 s의 길이는 50 이하의 자연수입니다.
  • 문자열 s는 오직 알파벳으로만 구성됩니다.

문제 해결 단계

이 문제는 문자열에서 특정 문자의 개수를 세고 두 개수를 비교하는 문제입니다. 이를 중학생도 이해하기 쉽게 세 단계로 나누어 설명해 보겠습니다.

1단계: 모든 문자를 소문자로 변환하기

문제에서 대문자와 소문자를 구별하지 않으므로, 먼저 문자열의 모든 문자를 소문자로 바꿔서 비교를 쉽게 만듭니다.
예를 들어, "pPoooyY"를 모두 소문자로 변환하면 "ppoooyy"가 됩니다.

2단계: 'p'와 'y'의 개수 세기

소문자로 변환된 문자열에서 'p'와 'y'가 몇 번씩 나오는지 셉니다.
Python에서는 .count()라는 함수를 사용해 특정 문자의 개수를 쉽게 셀 수 있습니다.

 

s.count('p')  # 문자열에서 'p'의 개수
s.count('y')  # 문자열에서 'y'의 개수

 

3단계: 'p'와 'y'의 개수 비교하기

마지막으로 'p'의 개수와 'y'의 개수를 비교해, 두 개수가 같으면 True, 다르면 False를 반환합니다. 만약 두 문자 모두 없다면 개수가 0으로 같기 때문에 자동으로 True가 반환됩니다.

 

파이썬 코드

def solution(s):
    # 1단계: 모든 문자를 소문자로 변환
    s = s.lower()
    
    # 2단계: 'p'와 'y'의 개수 세기
    p_count = s.count('p')
    y_count = s.count('y')
    
    # 3단계: 'p'와 'y'의 개수 비교하여 결과 반환
    return p_count == y_count

 

결과

  • 입력: "pPoooyY"
    • 소문자로 변환: "ppoooyy"
    • 'p'의 개수 = 2, 'y'의 개수 = 2
    • 출력: True
  • 입력: "Pyy"
    • 소문자로 변환: "pyy"
    • 'p'의 개수 = 1, 'y'의 개수 = 2
    • 출력: False

문제 풀고 느낀점

  • 어떻게 풀어야 할지 생각을 많이 해서 풀게되었다.
  • 문제를 해석하고 하나하나씩 풀어나가는게 중요하다는걸 느꼈다.
  • 결과를 보고 나면 쉽지만 좀더 알고리즘의 공부를 많이 해야겠다는 생각 많이 했다.
  • 문제를 더 많이 풀어봐야겠다고 생각했다.

+ Recent posts