1. 문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/468370

2. 제한 사항

3. 입출력 예










4. 풀이
def solution(message, spoiler_ranges):
message_list = list(message)
for start, end in spoiler_ranges:
for i in range(start, end + 1):
if message_list[i] != ' ':
message_list[i] = '@'
masked_message = ''.join(message_list)
original_words = message.split()
masked_words = masked_message.split()
spoiler_words = set()
for o_word, m_word in zip(original_words, masked_words):
if '@' in m_word:
spoiler_words.add(o_word)
masked_words_set = set(masked_words)
answer = len(spoiler_words)
for sw in spoiler_words:
if sw in masked_words_set:
answer -= 1
return answer
5. 후기
처음에는 튜플로 단어, 시작 위치, 끝 위치를 따로 저장해서 스포일러 위치랑 겹치는지 검사해보려고 했었다. 그런데 뭔가 복잡해질거 같은 느낌이 들어서 다른 방법을 생각해 보았다. 예시처럼 스포일러 부분을 @로 바꾸고, 기존 원본 단어 set과 @가 들어간 스포일러 단어 set을 만들어서 원본에 스포일러 단어가 들어가 있는지 검사하도록 했다. set을 사용하는 이유는 스포일러 단어 내의 중복을 없애기 위함이다. 마지막 처리는 스포일러 단어가 아닌 것들에서 스포일러 내의 단어가 포함된 것들을 찾는 로직이다. 근데 풀고 나서 보니까 그냥 처음 생각했던 대로 푸는게 정석인거 같은 느낌이 든다...
'코딩테스트 (프로그래머스) > Python' 카테고리의 다른 글
| [프로그래머스][Python][Lv. 2] 비밀 코드 해독 (0) | 2026.07.12 |
|---|---|
| [프로그래머스][Python][Lv. 2] 바이러스 파이프 (0) | 2026.07.10 |
| [프로그래머스][Python][Lv. 1] 노란불 신호등 (0) | 2026.05.26 |
| [프로그래머스][Python][Lv. 1] 3진법 뒤집기 (0) | 2026.05.23 |
| [프로그래머스][Python][Lv. 2] 올바른 괄호 (0) | 2026.05.10 |