백준 15881 (Pen Pineapple Apple Pen) [Python/파이썬] [Greedy/그리디]
https://www.acmicpc.net/problem/15881
15881번: Pen Pineapple Apple Pen
여러 개의 사과, 파인애플, 그리고 펜이 일렬로 세워져 있다. 이 물건들의 순서를 바꾸지 않고 옆에 있는 물건끼리 연결했을 때, 펜-파인애플-애플-펜을 몇 개나 만들 수 있을지 세어보자. 단, 펜,
www.acmicpc.net
나:
order = 'pPAp'
count =0
i = 0
n = int(input())
words = input()
while i != n:
if words[i:i+4] == order:
count +=1
i = i +4
else:
i +=1
print(count)
완성된 코드는 위와 같다.
(1)
order = 'pPAp'
count =0
i = 0
n = int(input())
orders = input()
순서의 기준인 pPAp를 변수 order에 담는다.
그리고 만들 수 있는 그 순서의 최대 개수를 담을 count 변수와
while 반복문을 종결시킬 조건에 도움을 주고 인덱싱에 활용되는 i 를 선언.
이후에 첫째 줄에 물건의 개수를 받을 변수 n 과 그 n 만큼의 문자열을 담을 변수 orders 를 선언
(2)
while i != n:
if orders[i:i+4] == order:
count +=1
i = i +4
else:
i +=1
print(count)
while을 이용해 문자열의 길이 n 까지 order와 같은지 확인을 반복한다.
이때 인덱싱의 경우 마지막을 포함하지 않기 때문에 oders[ i: i+4 ] 에서 +4를 해주었다.
그래서 만약 oder와 같다면 개수인 count를 +1 해준다.
그리고 문제조건에서 '하나의 펜이 두개의 oder에 포함될 수 없다' 고 언급했기 때문에 사용된 p의 경우 건너뛰어야함을 알 수 있다. 그래서 order 과 같은경우 펜이 사용된 것으로 간주해 i + 4로 인덱싱을 뛰어넘긴다.
만약 order와 같지 않다면 다음 orders의 인덱싱일때와 또 비교하도록 i +=1 을 해준다.
다른사람:
n = int(input())
string = input()
count = 0
count = string.count('pPAp')
print(count)
완성된 코드는 위와 같다.
주목할 점은 허무하지만 count() 함수로 위 문제를 쉽게 해결 가능하다.