본문 바로가기

프로그래머스/python

[프로그래머스/python] 문자열 내 p와 y의 개수

https://school.programmers.co.kr/learn/courses/30/lessons/12916

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명


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

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

제한사항
문자열 s의 길이 : 50 이하의 자연수
문자열 s는 알파벳으로만 이루어져 있습니다.

 

해설

간단한 문제인줄 알았지만 약간의 실수를 한번 했다. 일괄로 소문자들로 처리하면 될 것을 굳이 조건을 줘서 통과율이 60%밖에 안되는 코드가 1차 시도에 발생했다.

 

#1차 시도


def solution(s):
    answer = True
    count_p=s.count("p"or "P") #문제가 된 열
    count_y=s.count("y" or "Y") #문제가 된 열
    if count_p==count_y:
        return True
    elif count_y!=count_p:
        return False
    elif count_y==0 and count_p==0:
        return True

count 부분을 lower 처리를 하고 해야하는데 or로 조건을 넓게 하면 되겠지~ 라는 안일한 생각으로 처리했더니 60%만 통과하는 오류가 발생했다.

 

최종코드

 

def solution(s):
    answer = True
    count_p=s.lower().count('p') #일괄 소문자 처리하고 개수 세기
    count_y=s.lower().count('y') #일괄 소문자 처리하고 개수 세기
    if count_p==count_y:
        return True
    elif count_y!=count_p:
        return False
    elif count_y==0 and count_p==0:
        return True

일괄적으로 소문자로 처리해야 모든 알파벳 개수를 편하게 셀수 있다.