티스토리 뷰
(Python/파이썬) - 백준(BOJ) 16171번 : 나는 친구가 적다 (small)
하눤석 2022. 4. 13. 11:53https://www.acmicpc.net/problem/16171
16171번: 나는 친구가 적다 (Small)
첫 번째 줄에는 알파벳 소문자, 대문자, 숫자로 이루어진 문자열 S가 주어진다. (1 ≤ |S| ≤ 100) 두 번째 줄에는 성민이가 찾고자 하는 알파벳 소문자, 대문자로만 이루어진 키워드 문자열 K가 주
www.acmicpc.net
- 문제 :
친구가 적은 성민이는 수업에 결석해도 시험이나 과제에 대한 정보를 제대로 얻을 수 없었다. F 학점을 받을 위기까지 아슬아슬하게 결석일 수를 유지하던 성민이는, 어느 날 갑자기 영문도 모른 채 쪽지시험을 보게 되었다!
갑작스러운 쪽지 시험으로 마음이 급해진 성민이는 매직아이를 사용해 벼락치기를 하기로 한다.
성민이가 듣는 과목의 교과서는, 알파벳 소문자(a-z)와 알파벳 대문자(A-Z)로만 이루어져 있다. 성민이가 교과서에서 찾고자 하는 키워드도 역시 알파벳 소문자와 대문자로만 이루어져 있다. 하지만, 성민이에겐 큰 문제가 생겼다. 결석한 날의 수업 내용을 친구에게 빌려 필기를 하던 중, 교과서에 숫자(0-9)를 적어버린 것이다.
키워드를 찾기 힘들어 패닉에 빠진 성민이는 몇 안 되는 친구인 당신에게 도움을 요청했다. 성민이를 도와, 교과서에서 성민이가 찾고자 하는 키워드의 존재 여부를 알려주자.
- 풀이 :
정규표현식을 사용하여 해결하였습니다.
알고리즘의 흐름입니다.
1. re.sub에서 [0-9] 패턴을 사용하여 텍스트의 모든 숫자 요소들을 공백으로 치환하였습니다.
2. 치환한 결과물에서 t2(비교할 문자열)이 포함되어 있는지 찾기 위해 findall 함수를 사용하였습니다.
3. 결과물이 true라면 1을, 아니라면 (findall의 false 반환값은 None 입니다.) 0을 출력하도록 하였습니다.
주의할 점 :
re에서 match를 사용하면 안됩니다.
그 이유는 match 함수는 첫 글자부터 일치하지 않으면 None을 반환하기 때문입니다. 중간의 글자를 찾기 위해선 findall을 사용하는 것이 올바른 방법입니다.
- 소스코드 :
import re
t1 = input()
t2 = input()
text = re.findall(t2,re.sub("[0-9]","",t1))
if text:
print(1)
else:
print(0)
'Algorithm > Regular Expression' 카테고리의 다른 글
(Python) - BOJ(1013번) : Contact (0) | 2022.03.01 |
---|