단어 필터
보안 코드를 작성하고 있는 구름이는 사용자로부터 메시지를 전달 받았을 때, 특정 단어 S가 포함되어 있으면 시스템이 위험할 수 있다는 사실을 파악했다. 그래서 구름이는 전 달 받은 메시지 E에서 단어 S를 걸러내는 단어 필터를 만들기로 한다.
단어 필터는 메시지 E에 단어 S가 포함되어 있다면, 이를 가장 앞에서 등장하는 단어 S 부터 순서대로 제거한 후 안전한 메시지를 구름이에게 전달한다. 단어 필터는 대소문자도 모두 동일해야 지워야 할 단어라고 판단하며, 메시지 E에 더 이상 단어 S가 존재하지 않을 때까지 반복해서 필터링을 적용한다.
구름이를 도와 단어 필터를 만들고, 어떤 메시지 E를 받았을 때, 구름이가 전달 받은 메 시지 E의 내용을 출력하시오.
# ex)
>>> 5 10
>>> GOORM
>>> BwDcVGOORM
BwDcV
>>> 5 12
>>> goorm
>>> goormabgoorm
ab
>>> 1 5
>>> A
>>> AAAAA
EMPTY
# 내가 짠 코드
>>> user_input = input()
>>> user_input1 = input()
>>> user_input2 = input()
>>> s = user_input1
>>> user_output = user_input2.strip(s)
>>> if len (user_output) == 0:
>>> print ("EMPTY")
>>> else:
>>> print (user_output)
이런식으로 통과가 안되는 테스트 케이스 발견
>>> 6 9
>>> dsgseg
>>> dsgeppkeg
ppd
QnA
파이썬의 strip은 매개변수로 받은 문자들의 모든 조합을 문자열에서 찾아내 제거하는 메서드입니다. 그리고 해당 문자열의 시작과 끝 부분에서 일치하는가를 판별하고 제거하기 때문에 해당 문제와는 어울리지 않습니다. 'replace'같은 명령어를 사용해보시기 바랍니다.
해설
개념
- 시뮬레이션
- map()
- 문자열 메소드
map()
- 첫번째 매개 변수에 함수 입력
- 두번째 매개 변수에 반복 가능한 자료형 입력
map 함수 사용 예시
arr 에 1을 더하는 함수를 반복
# a 정수에 1을 더하는 함수
def add(a):
return a + 1
arr = [1, 2, 3]
# arr의 모든 요소에 add 함수를 적용하는 map 함수
add_arr = map(add, arr)
print(add_arr)
#여기까지만 출력하면 <map object at 0x7fab> 이렇게 뜸
# map 객체이기 때문에 list로 반환
print(list(add_arr))
이제 map() 함수를 문제에 적용해봅시다
첫번째 줄에서 여러 개의 정수를 한번에 입력받기
# 문자열을 입력받은 후, 오른쪽 공백 제거
# split()로 뛰어쓰기 단위로 분리한 객체를 list로 변환
n = list(input().rstrip().split())
# 공백 오른쪽 문자열 (정수여서 int 사용)
N = int(n[0])
# 공백 왼쪽 문자열
M = int(n[1])
print(N, M)
strip 함수
strip() | 열의 시작과 끝에서 공백 제거 |
r.strip() | 오른쪽 공백 제거 |
l.strip() | 왼쪽 공백 제거 |
이런걸 100개씩 반복할 수 없으므로 map 함수 이용
>>> N, M = map(int, input().split())
>>> print(N, M)
다음으로, 메세지 E 안에 단어 S가 포함되어 있을 때, 단어를 찾은 뒤 그 구간을 문자열에서 지워주기
str.replace() 이용: str.replace(a, b) - 문자열 a를 문자열 b로 변환
# 첫번째 열 (별로 안중요함 사실 그냥 input() 써도 될 것 같음)
>>> import sys
>>> input = sys.stdin.readline
>>> N, M = map(int, input().split())
# 두번째 열
>>> S = input().rstrip()
# 세번째 열
>>> E = input().rstrip()
# 필터 단어 S가 메세지 E에 포함시 코드를 계속 실행
>>> while S in E:
# replace 메소드를 통해서 E에서 S 단어를 계속 삭제
>>> E = E.replace(S, '')
>>> if E:
>>> print(E)
>>> else:
>>> print("EMPTY")
'코딩테스트' 카테고리의 다른 글
02 기초 수학과 구현 - 소수 찾기 (0) | 2023.09.09 |
---|---|
02 기초 수학과 구현 - 8진수 계산기 (0) | 2023.09.09 |
02 기초 수학과 구현 - 최장 맨해튼 거리 (0) | 2023.09.09 |
01 기초적인 문자열 구현 - 큰 수식 찾기 (0) | 2023.09.08 |
01 기초적인 문자열 구현 - 대소문자 바꾸기 (0) | 2023.09.08 |