본문 바로가기
연습하기/Python 문제풀이

[Python] 99클럽 코테 스터디 3일차 TIL 반복문과 조건문

by 니나노래방 2024. 7. 25.

 

- 오늘의 학습 키워드 : 반복문과 조건문을 이용한 갯수 카운팅
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지

더보기

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

  • 문자열의 각 원소를 돌면서 원소가 'p' 또는 'y'와 일치하는지 체크하고, 일치하면 각 원소의 count를 높이는 방식을 생각했습니다. 
  • 여기서 대소문자 구별이 안 된다는 점을 감안했습니다. 'p' 또는 'P'와 일치하면 p_cnt에,  'y' 또는 'Y'와 일치하면 y_cnt에 1을 추가하는 방식입니다. 
  • 이후 반복문 밖에서 p_cnt와 y_cnt를 비교합니다. 비교 결과 동일하면 TRUE를, 동일하지 않다면 FALSE를 출력하도록 조건문을 설정했습니다. 

  - 어떻게 해결했는지

def solution(s):
    p_cnt = 0 -- p를 세는 카운터 초기 설정 
    y_cnt = 0 -- y를 세는 카운터 초기 설정 

-- 반복문을 돌면서 일치하는 경우에 각 카운터에 1을 더해줌
    for i in range(len(s)):
        if s[i] == 'p' or s[i] == 'P':
            p_cnt += 1
        elif s[i] == 'y' or s[i] == 'Y':
            y_cnt += 1
    
-- p_cnt, y_cnt 집계 결과 비교 
    if p_cnt == y_cnt:
        answer = True
    else:
        answer = False

-- 결과 리턴
    return answer


  - 문제 풀이 시 문제 : 계속 TRUE만 출력되는 문제

  • 이유는 p_cnt와 y_cnt의 위치와 비교해야 하는 원소 설정에 오류가 있었기 때문입니다.
  • 위치 - 반복문 안에서 변수를 설정해 버려서, 반복문을 돌 때마다 두 값이 계속 0으로 리셋되는 결과가 있었습니다. 
  • 원소 - 원소의 순서가 아닌 원소를 비교해야 하는데, i == 'p'를 비교했습니다. 


  - GPT 제안  (lower함수와 count 함수를 써서 간결한 코드 만들기) -> 시간, 공간 복잡도는 둘다 O(n)이네요!

def solution(s):
    s = s.lower()  # Convert the string to lowercase
    return s.count('p') == s.count('y')  # Count 'p' and 'y' and compare

# Example usage
print(solution("pPoooyY"))  # Output: True
print(solution("Pyy"))      # Output: False

댓글