공부할 개념
- 시뮬레이션
- map()
- 문자열 메소드
문제 분석
이 문제는 메세지 에 포함된 필터 단어 을 계속 제거하는 문제입니다. 일반적인 단어를 제거하는 것과 다르게 2가지 조건이 있습니다.
- 단어 가 동시에 여러 개 등장한다면, 그 중 가장 앞에 있는 단어부터 제거하기
- 한 번 제거한 이후에도 필터 단어 가 남아있다면, 더 이상 남아있지 않을 때까지 제거 반복하기
이번 문제에서는 이 조건을 모두 만족할 수 있는 코드를 문자열 메소드를 적극 활용하여 짜보도록 하겠습니다.
map() 으로 한 번에 적용하기
Python에는 map(Function, iterable Data) 이라는 함수가 있습니다. 이 함수는 첫 번째 매개 변수에 함수를 넣고, 두번째 매개 변수에 반복 가능한 자료형을 넣습니다. 구체적으로 map() 함수가 하는 역할은 반복 가능한 자료형의 모든 요소에 첫 번째 매개 변수로 준 함수를 적용한 결과를 반환한 map 객체를 반환합니다. 아래의 코드를 통해서 더 쉽게 이해할 수 있습니다.
갑자기 왜 map() 함수에 대한 설명이 나왔을까요? 바로 Python에서 여러 개의 정수를 한 번에 입력 받기 위해서 필요하기 때문입니다.
현재 문제처럼 한 줄에 2개의 정수를 받기 위해서 Python은 꽤나 복잡한 작업을 진행해야 합니다. 한 줄 전체를 문자열로 받고, 띄어쓰기 단위로 분리한 뒤, 각각의 변수에 맞게 적절한 값을 넣어줍니다.
그러나 항상 이런 방식으로 입력을 받을 수는 없습니다. 한 줄에 10, 100개의 값이 입력이 된다면 반복문을 통해서 작성해야 하므로, 입력만 받는 코드를 짰는데도 힘이 빠져버릴지 모릅니다.
이보다는 아래 코드와 같이 map() 함수를 활용해서 더 깔끔하게 이런 입력을 받을 수 있습니다.
map() 함수는 입력 이외에도 구현이나, 시뮬레이션을 할 때 유용하게 사용이 됩니다. 다양한 알고리즘을 구현할 때 있어서 자주 사용되는 함수이기 때문에 꼭 활용하는 방법을 익혀두셔야 합니다.
문자열 메소드로 단순하게 해결하기
우선 이 문제는 아래의 코드처럼 반복문과 인덱스 찾기만으로 해결할 수 있습니다. 만약에 메세지 에 단어 가 포함되어 있다면, 계속 그 단어를 찾은 뒤, 그 구간을 문자열에서 지워주면 됩니다.
하지만 메소드를 사용하면 조금 더 간결하고 직관적으로 코드를 작성할 수 있습니다. 굳이 우리가 단어를 찾아서 지우는 대신, str.replace() 메소드를 이용하면 현재 문자열에 등장하는 특정 문자열을 한 번에 모두 제거할 수 있습니다. str.replace(a, b) 는 문자열 str에 등장하는 모든 문자열 a를 문자열 b로 변환한다는 의미입니다. 아래와 같이 b를 빈 문자열로 두면, 삭제하는 연산이 되겠죠?
Code.