innn

99클럽 코테 스터디 3일차 TIL + 조건문, 반복문, 대소문자 비교 본문

코딩 테스트/파이썬 코딩테스트

99클럽 코테 스터디 3일차 TIL + 조건문, 반복문, 대소문자 비교

33삼 2024. 7. 24. 23:44

 

오늘의 학습 키워드

  • 문자열 처리
  • 조건문
  • 반복문
  • 대소문자 비교

오늘은 주어진 문자열에서 'p'와 'y'의 개수를 비교하여 동일한 개수인지 확인하는 알고리즘을 작성했다. Python에서 문자열을 순회하면서 각 문자를 검사하고, 특정 문자일 때 카운트를 증가시키는 방식을 사용했다. 대소문자를 구분하지 않기 위해 조건문에서 'p'와 'P', 'y'와 'Y'를 각각 비교하였다. 최종적으로 두 개수가 같으면 True를 반환하고, 그렇지 않으면 False를 반환한다.

 

def solution(s):
    answer = True
    sum_p = 0
    sum_y = 0
    
    for char in s:
        if char == 'p' or  char == 'P':
            sum_p += 1
        elif char == 'y' or char == 'Y':
            sum_y += 1
    if sum_p == sum_y:
        return True
    elif sum_p == 0 and sum_y == 0:
        return True
    else:
        return False

 


오늘의 회고

 

문자열을 순회하면서 각 문자를 확인하고, 'p' 또는 'P'일 때와 'y' 또는 'Y'일 때 각각 카운트를 증가시키는 방법으로 해결했다. 최종적으로 두 카운트를 비교하여 동일하면 True, 다르면 False를 반환하는 로직을 작성했다.

 

해당 문제를 더 효율적으로 해결 할 수 있는 방법이 있었는데, 문자열을 모두 소문자로 변환해서 비교하면 문자열을 한 번 순회하면서 p와 y의 개수를 동시에 세는 것이 가능했다. 수도 코드로 짤 때 js에서 하듯이 toLowerCase()를 생각했는데 파이썬에서는 해당 메서드를 어떻게 사용하는 지 몰라서 일단 for문안에서 if문을 돌렸다. 

 

찾아보니 파이썬 역시 유사하게 lower 메서드가 있었다. (아 그리고 추가로 좀 놀라운 사실은 파이썬 문법 잘 모르고 js 지식으로 풀다보니 and나 or을 && 이런식으로 비교했는데 예약어가 and여서 정말 놀라웠다)

def solution(s):
    s = s.lower()  # 문자열을 모두 소문자로 변환
    return s.count('p') == s.count('y')

 

 

먼저 lower() 메서드로 문자열을 모두 소문자로 변환한 뒤, count() 메서드를 사용해 p와 y의 개수를 직접 배교하는 방식이 가능했다.