[알고리즘] BOJ 16172 나는 친구가 적다 (Large) #Python

김상현·2022년 10월 26일
0

알고리즘

목록 보기
217/301
post-thumbnail

[BOJ] 16172 나는 친구가 적다 바로가기

📍 문제

친구가 적은 성민이는 수업에 결석해도 시험이나 과제에 대한 정보를 제대로 얻을 수 없었다. F 학점을 받을 위기까지 아슬아슬하게 결석일 수를 유지하던 성민이는, 어느 날 갑자기 영문도 모른 채 쪽지시험을 보게 되었다!

갑작스러운 쪽지 시험으로 마음이 급해진 성민이는 매직아이를 사용해 벼락치기를 하기로 한다.

성민이가 듣는 과목의 교과서는, 알파벳 소문자(a-z)와 알파벳 대문자(A-Z)로만 이루어져 있다. 성민이가 교과서에서 찾고자 하는 키워드도 역시 알파벳 소문자와 대문자로만 이루어져 있다. 하지만, 성민이에겐 큰 문제가 생겼다. 결석한 날의 수업 내용을 친구에게 빌려 필기를 하던 중, 교과서에 숫자(0-9)를 적어버린 것이다.

키워드를 찾기 힘들어 패닉에 빠진 성민이는 몇 안 되는 친구인 당신에게 도움을 요청했다. 성민이를 도와, 교과서에서 성민이가 찾고자 하는 키워드의 존재 여부를 알려주자.


📍 입력

첫 번째 줄에는 알파벳 소문자, 대문자, 숫자로 이루어진 문자열 S가 주어진다. (1 ≤ |S| ≤ 200,000) 두 번째 줄에는 성민이가 찾고자 하는 알파벳 소문자, 대문자로만 이루어진 키워드 문자열 K가 주어진다. (1 ≤ |K| ≤ 200,000)

단, 입력으로 들어오는 키워드 문자열 K의 길이는, 교과서의 문자열 S보다 짧거나 같다.


📍 출력

첫 번째 줄에 성민이가 찾고자 하는 키워드가 교과서 내에 존재하면 1, 존재하지 않으면 0을 출력한다.


📍 풀이

💡 고찰

  • 정규 표현식(Regular Expression)을 활용하여 문제를 해결하였다.
  • 파이썬에서는 정규 표현식을 지원하는 re 모듈을 사용하면 문자을 원하는대로 수정할 수 있다.

📌 문제 풀이

✏️ 1. 숫자를 제거한 문자열 S에서 키워드(K)가 존재한다면 1 반환

if K in ''.join(findall("[a-zA-Z]", S)):
    return 1
  • findall() 함수는 정규식([a-zA-Z])과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.
  • ''.join() 함수는 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환한다.

✍ 코드

from re import findall
from sys import stdin

def solution(S, K):
    # 문자열 K가 문자열 S에서 숫자를 제외한 문자열에 연속으로 일치할 경우
    if K in ''.join(findall("[a-zA-Z]", S)):
        return 1
    else:
        return 0

# input
S = stdin.readline().strip()
K = stdin.readline().strip()

# result
result = solution(S, K)
print(result)
profile
목적 있는 글쓰기

0개의 댓글