본문 바로가기

Algorithm/Programmers lv.1

[프로그래머스] 문자열 내 p와 y의 개수 (count , lower)

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

 

프로그래머스

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

programmers.co.kr

 

처음에는 다음과 같이 무지성 반복문으로 풀었으나.. 정확성이 60점으로 오답 판정이 나왔다.

 

def solution(s):
    s_list = list(s)
    n = len(s_list)
    pn = 0
    yn = 0

    for i in range(n):
        if s_list[i] == 'p':
            pn += 1
        elif s_list[i] == 'y':
            yn += 1

    if pn == yn:
        return 'true'
    else:
        return 'false'

 

좀 더 다른 방법을 생각해봤다. count 함수를 써보기로 했다.

 

def solution(s):
    s_list = list(s)

    pn = s_list.count('p')
    yn = s_list.count('y')


    if pn == yn:
        return True
    else:
        return False

 

??? 이번에도 60점, 오답 판정이다. 알고보니 문제를 잘못읽었다. ;;

 

대문자와 소문자는 구별하지 않는다고 한다.

 

다음과 같이 문자열을 전부 소문자로 변환 후 실행하면 잘 된다.

s = s.lower()만 추가하면 된다.

 

def solution(s):
    # 입력 문자열을 모두 소문자로 변환
    s = s.lower()
    
    # 'p'와 'y'의 개수를 센다
    pn = s.count('p')
    yn = s.count('y')
    
    # 'p'와 'y'의 개수가 같으면 True, 그렇지 않으면 False 반환
    if pn == yn:
        return True
    else:
        return False

# 함수 호출 예시
s = "Pyy"
print(solution(s))  # false

 

 

참고로, 마지막에 조건문을 쓴 부분은 

    if pn == yn:
        return True
    else:
        return False

 

아래와 같이 축약이 가능하다.

return pn == yn

 

 

 

 

 

 

다른 사람의 풀이를 보니 lower함수와 count함수를 동시에 쓸 수 있는 모양이다. 참고하자.

def numPY(s):
    # 함수를 완성하세요
    return s.lower().count('p') == s.lower().count('y')



# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( numPY("pPoooyY") )
print( numPY("Pyy") )