Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- pcce 기출문제 10번 공원 풀이
- c++ 1991
- DirectX12
- 백준 5567
- pcce 기출문제 풀이
- 오블완
- 잔디 기부 캠페인
- 고대 문명 유적 탐사
- pcce 기출문제 10번 공원
- PCCE
- root signature
- python 고대 문명 유적 탐사
- 티스토리챌린지
- 잔디 기부
- 렌더링 파이프
- c++ 5567
- gemmasprint
- DirectX
- depth-stencil
- boj 1991
- boj 5567
- pcce 기출문제 9번 지폐 접기
- 코드트리 고대 문명 유적 탐사
- texture mapping
- pccp 기출문제 풀이
- 프로그래밍공부
- pcce 기출문제 10번 지폐 접기 풀이
- directx 그래픽스
- constant buffre
- 수식 복원하기
Archives
- Today
- Total
오구의코딩모험
[Python] 9935번 : 문자열 폭발 본문
반응형
문제 3줄 요약
1. 문자열에서 지워야할 '폭발 문자열'이 라는 것이 있다.
2. 위의 3 가지 과정으로 폭발이 진행된다.
3. 폭발이 끝난 후, 남은 문자열을 출력하되 남은 문자가 없을 경우엔 "FRULA"를 출력한다.
Python에는 문자열에서 문자를 지울 수 있는
replace 함수가 존재하지만...
replace를 사용하여 구현한다면?
펑
시간 초과가 터져버린다.
최대 길이가 100만인 문자열을
replace로 지워가며
새로운 문자열까지 검색하는 과정이 있다보니
100만 * 검색횟수 만큼 시간이 소요된다고 생각된다.
그래서 생각해낸 방법은
이해를 돕기위해 허접한 그림판에 써보았다.
Input이 ACCBB고 폭발 문자열이 CB라면,
1차 폭발 후, ACB
2차 폭발 후, A가 될 것이다.
위 과정을 구현하기 위해
폭발 문자열의 마지막 문자인 B가
Check에서 보였을 때,
앞에 있던 문자열들이 폭발 문자열과 일치한지 검사한다.
맞다면,
폭발 문자열만큼 지워주고
다시 Input의 문자를 하나씩 Check에 넣어준다.
한번 넣었던 Input은 다시 넣지 않게
방문도 체크해주었다.
from sys import stdin
if __name__ == "__main__":
# 폭발 문자열이 담긴 입력 값, 폭탄 문자열
input_list = list(stdin.readline().strip())
bomb_str = str(stdin.readline().strip())
i, cnt, length = 0,0,len(bomb_str)
result = []
# 방문 표시
visited = [ 0 for _ in range(1000000)]
while(i != len(input_list)):
# 방문 했다면, 패스
if visited[i] == 1:
i += 1
continue
spell = input_list[i]
result.append(spell)
visited[i] = 1
# 폭발 문자열의 마지막 글자가 탐색된 경우
# 주어진 문장보다 폭발 문자열이 길면 폭발할 경우가 없다.
if (result[-1] == bomb_str[-1]) and (len(result) >= length):
delete = 1
# 폭발 문자열과 전부 일치하는지 검사
for r in range(length):
if result[-1-r] != bomb_str[-1-r]:
delete = 0
break
# 전부 일치한다면, 삭제
if delete:
for r in range(length):
result.pop()
if len(result):
i = i-(length+1)
else:
i=0
i += 1
if len(result):
print(''.join(result))
else:
print("FRULA")
이 외에도
고려해줘야할 부분이 꽤 많았지만,
통과!
끝
반응형
'프로그래밍 공부 > 백준 알고리즘' 카테고리의 다른 글
[Python] 1339번 : 단어 수학 (0) | 2023.02.18 |
---|---|
[Python] 1715번 : 카드 정렬하기 (0) | 2023.02.18 |
[Python] 9251번 : LCS (0) | 2023.02.17 |
[Python] 5430번 : AC (1) | 2023.02.16 |
[Python] 7576번 : 토마토 (0) | 2023.02.16 |
Comments