문제
버그 투성이 프로그램을 잘 만드는 백준이는 버그를 찾는 프로그램을 만들었다.
이 프로그램은 프로그램의 소스 코드를 입력으로 받은 뒤, 버그를 발견하면 해당 부분을 주석처리해준다.
하지만, 버그를 찾는 프로그램도 백준이가 작성했기 때문에 버그가 있다. 바로, 주석처리하는 대신에 그 부분을 BUG로 바꿔버린다.
버그 찾는 프로그램이 처리한 결과가 주어졌을 때, BUG를 모두 없애는 프로그램을 작성하시오.
입력
입력은 여러 줄의 소스 코드로 이루어져 있다. 이 소스 코드는 백준이가 작성한 버그를 찾는 프로그램으로 이미 처리가 되어있다. 각 줄은 100글자 이내이고, 입력은 파일이 끝날 때 끝난다. 줄의 개수는 따로 제한을 두지 않는다.
출력
입력으로 주어진 소스 코드의 BUG를 모두 제거한 뒤 출력한다. 출력하는 소스 코드에는 BUG가 있으면 안 된다. 즉, ABUBUGGB와 같은 경우는 AB가 되어야 한다.
예제 입력 1 복사
print "No bugs here..."
void hello() {
BUGBUG
printfBUG("Hello, world!\n");
}
wriBUGBUGtelBUGn("Hello B-U-G");
예제 출력 1 복사
print "No bugs here..."
void hello() {
printf("Hello, world!\n");
}
writeln("Hello B-U-G");
문제풀이
주어진 입력 값이 BUG라는 단어가 없어야함
문제해결
입력값에 BUB라는 단어가 없을때 까지 반복한다(재귀)
ABUBUGGB -> ABUGB-> ABUGB-> AB-> 종료
정규식은 한줄에 해당하는 규칙이 있는 경우만 찾아서 반환을 해주기 때문에
입력값에 해당 단어가 없을때까지 계속적으로 반복하려면
정규식을 해당 규칙이 없을 때 까지 반복시켜줘야 한다.
이를 하기 위해서 재귀함수 사용
재귀 함수를 돌리는데 매개변수로 들어온 값이 정규식으로 BUG라는 단어를 찾은 후 변환된 값이 없는 경우가
더이상 문자열 내에 BUG라는 단어가 없다는 것이다.
이때 종료
import re
def recursion(s) :
regex = re.compile("(BUG)")
transed_string = re.sub(regex, "", s)
if s == transed_string : #입력값이 변환된 값과 같은 경우 더이상 BUG 없음
return transed_string #반환 및 종료
return recursion(transed_string) #입력된 값이 변환된 값과 같지 않아 다시 변환 필요(재귀 처리)
while True :
try :
input_string = input()
print(recursion(input_string))
except :
break
'코테풀이 > 문자열' 카테고리의 다른 글
[백준 | 실버4] 1543: 문서 검색(정규식, fstring) (0) | 2022.03.29 |
---|---|
[백준 | 브론즈2] 니모를 찾아서(정규식-대소문자 구분없이 단어 찾기) (0) | 2022.03.28 |
[백준 | 브론즈1] 2954번 창녕이의 일기장(정규식-단어치환) (0) | 2022.03.27 |
[백준 | 브론즈2] 2857: FBI(정규식-특정단어의 앞뒤 단어 찾기) (0) | 2022.03.27 |
[백준 | 브론즈2] 1264번: 모음의 개수(정규식-한글자 찾기) (0) | 2022.03.27 |