JSITCLUB
파이썬 - 프로그래머스 - 문자열내 p와 y의 개수 본문
프로그래머스 level 1
문제 설명
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다.
제한사항
-
문자열 s의 길이 : 50 이하의 자연수
-
문자열 s는 알파벳으로만 이루어져 있습니다.
입출력 예
s |
answer |
"pPoooyY" |
true |
"Pyy" |
false |
입출력 예 설명
입출력 예 #1
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.
입출력 예 #2
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.
코딩테스트 연습 - 문자열 내 p와 y의 개수
대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를
programmers.co.kr
풀이 및 코드 |
문제요약
문자열에 있는 p의 갯수와 y의 갯수가 같으면 True,다르면 False 리턴
문제해설
이 문제를 구하려면 먼저 조건에 맞는 값들의 갯수를 구하는것을 알아야 합니다.
즉, "서울에서 김서방 찾기" 처럼 조건에 맞는 것을 찾고 끝나는 것이 아니라, 끝까지 돌아 조건에 맞는것의 갯수를 구하는 문제 입니다.
이것은 마치 상자안에 있는 빨간공의 개수세는 것과 같습니다.
위의 그림에서 상자는 문자열s, 빨간공을 'p'라고 하고, 빨간공의 개수를 개수를 담을변수 cnt1이라고 한다면
위의 그림과 같이 문자열 s에서 각각의 글자가 'p' 인지 확인 후 맞으면 변수 cnt1의 값을 하나씩 올리면 되는 것입니다.
간단히 코딩으로 표현하면 다음과 같습니다.
s="ppyypp"
cnt1=0
for c in s:
if c=="p":
cnt1 = cnt1+1
print(cnt1)
반복문이 돌면서 조건을 확인하는것 이것이 검색의 기본 형태이니 잘 기억하기 바랍니다.
하지만 위의 코드는 소문자만 확인이 됩니다. 그러므로 대문자도 확인을 해야 겠죠.
s="ppyypp"
cnt1=0
for c in s:
if c=="p" or c=="P":
cnt1 = cnt1+1
print(cnt1)
이제야 문자열의 p를 모두 찾을 수 있게 되었습니다. 그럼 y의 갯수도 같은방법으로 찾을수 있습니다.
s="ppyypp"
cnt1=0
for c in s:
if c=="p" or c=="P":
cnt1 = cnt1 + 1
print(cnt1)
cnt1=0
for c in s:
if c=="y" or c=="Y":
cnt1 = cnt1 + 1
print(cnt1)
이제 p와 y의 개수를 모두 구할 수 있게 되었습니다. 하지만 좀 비효율 적인것 같지 않으세요?
위의 상자에서 만약 빨간 공과 파란공의 개수를 세어야 할때 빨간공을 세고, 다시 파란공를 세기위해 처음부터 다시 세는 사람은 없겠죠?
아마도 대부분은 한번에 빨간공과 파란공의 개수를 셀겁니다. 그렇게 하기위해서는 변수"파란공 개수"가 필요하고요.
그것을 코드로 표현하면...
s="ppyypp"
cnt1=0
cnt2=0
for c in s:
if c=="p" or c=="P":
cnt1 = cnt1 + 1
if c=="y" or c=="Y":
cnt2 = cnt2 + 1
print(cnt1,cnt2)
이제 거의 끝났습니다. 문제가 p와y의 갯수가 같은면 True 다르면 False를 리턴하는 함수를 만드는 것이니 최종코드는 다음과 같습니다.
결과코드
def solution(s):
cnt1=0
cnt2=0
for c in s:
if c=="p" or c=="P":
cnt1 = cnt1 + 1
if c=="y" or c=="Y":
cnt2 = cnt2 + 1
if cnt1==cnt2:
return True
else:
return False
우리는 알고리즘 공부를 하기위해 위와 같이 코딩을 했지만, 사실 문자열 메서드에 포함된 글자의 개수를 알려주는 문자열의 메서드 count()가 있습니다. 물론 빨리 구현해야 한다면 당연히 count()함수를 사용해야 하지만, 먼저 위에서 설명한 알고리즘을 잘 숙지 하시면, 다른 언어를 이해하거나 속도를 올려야 할때 도움이 되니 소홀히 하지 않길 바랍니다.
'파이썬 > 문제풀이' 카테고리의 다른 글
파이썬 - 프로그래머스 - 평균 구하기 (0) | 2020.05.26 |
---|---|
파이썬 - 프로그래머스 - x만큼 간격이 있는 n개의 숫자 (0) | 2020.05.20 |
파이썬 - 프로그래머스 - 가운데 글자 가져오기 (0) | 2020.01.03 |
파이썬 - 프로그래머스 - 서울에서 김서방 찾기 (0) | 2020.01.02 |
파이썬 - 프로그래머스 - 수박수박수박수 (0) | 2019.12.30 |