[백준] 16120 PPAP (파이썬 python)

2024. 3. 1. 21:08· Algorithm/BOJ
목차
  1. 문제 링크
  2. 문제 풀이

 

 

문제 링크

 

https://www.acmicpc.net/problem/16120

 

16120번: PPAP

첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.

www.acmicpc.net

 

 

문제 풀이

 

def check(input_str):
    stack = []
    flag = False
    for str in input_str:
        # if str == 'A' and (len(stack) < 2 or stack[-2:] != ['P', 'P']):
        #     return flag
        stack.append(str)
        if len(stack) >= 4 and stack[-4:] == ['P', 'P', 'A', 'P']:
            for _ in range(3):
                stack.pop()
    if len(stack) == 1 and stack[0] == 'P':
        flag = True
    return flag

input_str = list(input())
if check(input_str):
    print('PPAP')
else:
    print('NP')

 

 

시간 제한은 1초인데, 입력 문자열의 크기가 최대 100만까지로 커서

시간 초과에 중점을 두고 풀어야 하는 문제였습니다.

입력받은 전체 문자열을 체크하는 과정에서

처음에는 평소 deque를 사용할 때처럼 습관적으로 pop(0)을 해서

입력받은 string이 존재하지 않을 때까지 while문을 돌렸는데,

생각해보니 pop(0)은 시간복잡도 O(n)으로 pop(0)만 하더라도 시간이 터지는 문제가 있었습니다.

주의해서 기존 문자열은 건드리지 않고, 하나씩 체크만 하는 방법으로 변경했습니다.

 

이를 인지하고 나니, 해결 방법은 간단해졌습니다.

stack에 입력받은 문자열을 앞에서부터 하나씩 추가해주고

stack의 길이가 4 이상일 경우 최근 추가된 4개가 'PPAP'인지를 확인한 후 맞으면 뒤 3개를 지워 'P'로 대치시켜줍니다.

이런식으로 반복할 경우 만약 입력 문자열이 PPAP 문자열일 경우

결국 'P'만 남게 됩니다.

마지막에 stack에 남은 문자열이 'P'인지 확인하고 그에 따라 출력해주면 됩니다.

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 20437 문자열 게임 2 (파이썬 python)  (0) 2024.03.04
[백준] 7576 토마토 (파이썬 python)  (0) 2024.03.02
[백준] 11000 강의실 배정 (파이썬 python)  (0) 2024.02.27
[백준] 2839 설탕 배달 (파이썬 python)  (1) 2024.02.27
[백준] 5052 전화번호 목록 (파이썬 python)  (0) 2024.02.21
  1. 문제 링크
  2. 문제 풀이
'Algorithm/BOJ' 카테고리의 다른 글
  • [백준] 20437 문자열 게임 2 (파이썬 python)
  • [백준] 7576 토마토 (파이썬 python)
  • [백준] 11000 강의실 배정 (파이썬 python)
  • [백준] 2839 설탕 배달 (파이썬 python)
YOONJELLY
YOONJELLY
YOONJELLY
JELLYJELLY
YOONJELLY
전체
오늘
어제
  • 분류 전체보기 (153)
    • Springboot (2)
    • Android (15)
    • Algorithm (126)
      • 개념 (8)
      • BOJ (91)
      • Programmers (15)
      • SWEA (4)
    • 경험_기록 (1)
    • RIM_TIP (4)
    • Github (2)
    • CS (1)
      • 운영체제 (1)
      • 컴퓨터네트워크 (0)
      • 정보처리기사 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DP
  • softeer
  • 액티비티컴포넌트
  • kotlin
  • SWEA
  • 그리디
  • 안드로이드
  • 알고리즘
  • DFS
  • programmers
  • 스택
  • Python
  • 딕셔너리
  • 코딩테스트
  • 코틀린
  • 큐
  • 다이나믹프로그래밍
  • 백준
  • 프로그래머스
  • 이진탐색
  • Android
  • BFS
  • 정렬
  • 문자열
  • 자료구조
  • 이것이코딩테스트다
  • BOJ
  • 파이썬
  • 완전탐색
  • 소프티어

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
YOONJELLY
[백준] 16120 PPAP (파이썬 python)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.