안경잡이 구루루

백준 15881 (Pen Pineapple Apple Pen) [Python/파이썬] [Greedy/그리디] 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 15881 (Pen Pineapple Apple Pen) [Python/파이썬] [Greedy/그리디]

구루루(gururu) 2023. 11. 4. 15:51
반응형

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() 함수로 위 문제를 쉽게 해결 가능하다.

반응형