| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- java #자바 #동빈나
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 재귀
- 농구
- 알고리즘
- 백트랙킹
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 코딩테스트
- 프로그래머스
- 백준 #알고리즘 #파이썬 #코딩테스트
- 백준 #파이썬 #알고리즘 #코딩테스트
- 투포인터
- java #자바 #생활코딩
- css #생활코딩 #웹
- 자바 #java
- BFS
- DFS
- css #웹 #생활코딩
- dp
- 백준
- 파이썬 #백준 #알고리즘 #코딩테스트
- java #자바 #나동빈
- 다이나믹프로그래밍
- PYTHON
- Dijkstra
- 파이썬
- 다익스트라
- java #자바
- react #리액트 #동빈나 #나동빈 #유튜브강의
Archives
- Today
- Total
커리까지
[백준] 9953번 문자열 폭발 파이썬 본문
728x90
SMALL
문제
상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다.
폭발은 다음과 같은 과정으로 진행된다.
- 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다.
- 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다.
- 폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다.
상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다.
폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다.
입력
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다.
둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다.
두 문자열은 모두 알파벳 소문자와 대문자, 숫자 0, 1, ..., 9로만 이루어져 있다.
출력
첫째 줄에 모든 폭발이 끝난 후 남은 문자열을 출력한다.
예제 입력 1
mirkovC4nizCC44
C4예제 출력 1
mirkovniz예제 입력 2
12ab112ab2ab
12ab예제 출력 2
FRULA문제풀이
처음에는
if text in list이런 식으로 하나씩 비교해서 제거 하는 방식으로 생각했다.- 그러나 그렇게 하면 문자열과 일치하지 않는데도 하나만 일치해서 삭제해버리는 경우가 생긴다.
그럼 문자열 마지막과 일치하면 그건 문자열과 일치할 가능성이 있다는 뜻이기에 그러한 식으로 진행하였다.
먼저 입력받은 문자열들을 list로 변형시긴다.
split()을 하면 그냥 문자열로만 들어오고 리스트 형식으로 변형되지 않는다.
text = input().strip()
bomb = input().strip()
- 폭발 문자열 길이와 마지막 단어를 변수에 담는다.
bomb_length = len(bomb)
bomb_last = bomb[-1]
text로for loop를 돌면서 먼저answer에 담는다.
answer = []
for txt in text:
answer.append(txt)
- 그 다음에 지금
txt와bomb_last(폭발 문자열 마지막)이 일치하고answer에서 지금들어온 문자까지 해서bomb_length(폭발 문자열 길이)만큼 뒤에서 자른 문자열이 폭발 문자열과 일치하면for loop를 돌면서answer에서 문자열을 하나씩 제거한다.
answer = []
for txt in text:
answer.append(txt)
if txt == bomb_last and ''.join(answer[-bomb_length:]) == bomb:
for _ in range(bomb_length):
answer.pop()
- 만약에
answer가 비어있지 않으면 문자열을 출력하고 비어있으면 FRULA 를 출력한다.
if answer:
print(''.join(answer))
else:
print('FRULA')
제출답안
import sys
input = sys.stdin.readline
def solution():
text = input().strip()
bomb = input().strip()
bomb_length = len(bomb)
bomb_last = bomb[-1]
answer = []
for txt in text:
answer.append(txt)
if txt == bomb_last and ''.join(answer[-bomb_length:]) == bomb:
for _ in range(bomb_length):
answer.pop()
if answer:
print(''.join(answer))
else:
print('FRULA')
solution()728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
| [백준] 13417번 카드 문자열 파이썬 (0) | 2022.03.07 |
|---|---|
| [프로그래머스] 2020 카카오 블라인드 문자열 압축 파이썬 (0) | 2022.03.06 |
| [백준] 1152번 단어의 개수 파이썬 (0) | 2022.03.01 |
| [프로그래머스] 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기 파이썬 (0) | 2022.02.26 |
| [백준] 1026번 보물 파이썬 (0) | 2022.02.24 |
Comments