본문 바로가기
Pyalgo100

Pyalgo100 2024.02.08 (목) Pyalgo100 파이썬 문제풀이

by gosikoca 2024. 2. 8.

정규표현식을 스스로 풀어보자라는 목표를 가지고 오늘 문제풀이를 진행하였다. 음 나름 어제의 비해 난이도가 높지 않고 출력결과들을 간단하게 표현하면 되는 문제는 시간은 걸렸지만 끄적 끄적 풀어 나갔던 것 같다.

 

1. 파일 확장자 추출

문제 설명
주어진 파일 경로 또는 URL에서 파일 확장자를 추출하는 함수를 작성해주세요. 파일 확장자는 파일명 뒤에 오는 마지막 점(.) 뒤의 문자열입니다. 파일 확장자가 없는 경우, 빈 문자열을 반환합니다.

예를 들어, 문자열 "example/document.pdf"에서 함수는 pdf를, "example/folder"에서는 빈 문자열을 반환해야 합니다.

제한 사항
파일 경로 또는 URL은 문자열로 주어집니다.
파일 경로 또는 URL의 길이는 최대 1000자입니다.

 

입출력 설명
주어진 파일 경로 또는 URL에서 파일 확장자를 추출하여 반환합니다. 파일 확장자가 없는 경우 빈 문자열을 반환합니다.

 

이 문제는 입력된 문자열에서 파일 확장자를 추출을 했어야 했는데 그렇기 위해 정규표현식을 통해 추출을 한 것을 변수에 할당해주고 그것에서 match를 통해 원하는 결과를 가져왔다.

import re


def solution(data):
    pattern = r".*\.([^./]+)$"
    match = re.search(pattern, data)
    if match:
        return match.group(1)
    else:
        return ""
  1. import re: 정규표현식을 사용하기 위해 Python의 re 모듈을 임포트합니다.
  2. def solution(data):: solution이라는 함수를 정의합니다. 이 함수는 문자열 data를 입력으로 받습니다.
  3. pattern = r".*\.([^./]+)$": 정규표현식 패턴을 정의합니다. 이 패턴은 다음과 같은 구조를 가지고 있습니다:
    • .*: 임의의 문자열과 일치합니다. 여러 개의 문자가 있을 수 있음을 의미합니다.
    • \.: 점(.)을 찾습니다. 파일 확장자는 보통 점 다음에 나오는 문자들로 이루어져 있습니다.
    • ([^./]+): 괄호로 둘러싸인 부분은 확장자에 해당합니다. 여기서 [^./]+는 슬래시(/)나 점(.)이 아닌 문자들을 하나 이상 찾습니다.
    • $: 문자열의 끝과 일치합니다. 이는 주어진 문자열의 끝에서부터 검색을 의미합니다.
  4. match = re.search(pattern, data): 주어진 데이터(data)에서 정규표현식 패턴과 일치하는 부분을 검색합니다.
  5. if match:: 정규표현식과 일치하는 부분이 있으면 실행합니다.
    • return match.group(1): 정규표현식에서 정의한 그룹 중 첫 번째 그룹을 반환합니다. 여기서는 파일 확장자에 해당하는 부분입니다.
  6. else:: 정규표현식과 일치하는 부분이 없는 경우 실행합니다.
    • return "": 일치하는 부분이 없으면 빈 문자열을 반환합니다.

 

2. 숫자 추출

문제 설명
주어진 문자열에서 숫자와 쉼표만을 포함한 부분을 추출하고, 쉼표를 제거하여 순수한 숫자만을 반환하는 함수를 작성해주세요. 문자열에 숫자가 없는 경우, 빈 문자열을 반환합니다.

예를 들어, 문자열 "가격은 3,500원입니다."에서 함수는 3500을, "오늘은 2023년 3월 5일"에서는 202335를 반환해야 합니다.

제한 사항
문자열은 숫자, 쉼표, 그리고 다른 문자들을 포함할 수 있습니다.
문자열의 길이는 최대 1000자입니다.

 

입출력 설명
주어진 문자열에서 숫자와 쉼표만을 포함한 부분을 추출하고, 쉼표를 제거하여 순수한 숫자 문자열을 반환합니다. 문자열에 숫자가 없는 경우 빈 문자열을 반환합니다.

 

이 문제는 주어진 문자열에서 숫자만을 추출하여 이어붙인 새로운 문자열을 반환해야 하는 문제 였다. 

그러기 위해서 isdigit() 이라는 메서드를 활용하였다.

def solution(data):
    return "".join([char for char in data if char.isdigit()])
  1. def solution(data):: solution이라는 함수를 정의합니다. 이 함수는 문자열 data를 입력으로 받습니다.
  2. [char for char in data if char.isdigit()]: 이 부분은 리스트 컴프리헨션을 사용하여 문자열 data에서 각 문자를 가져오고, 만약 그 문자가 숫자인 경우에만 리스트에 포함시키는 구문입니다.
    • for char in data: 문자열 data의 각 문자에 대해 반복합니다.
    • if char.isdigit(): 만약 현재 문자(char)가 숫자인 경우에만 해당 문자를 리스트에 포함시킵니다. isdigit() 함수는 문자가 숫자인지 여부를 확인하는 메서드입니다.
  3. "".join(...): 리스트에 포함된 문자들을 빈 문자열을 기준으로 이어붙여서 하나의 문자열로 만듭니다. 이 부분은 리스트 컴프리헨션에서 선택된 숫자들을 합치는 역할을 합니다.
  4. return ...: 최종적으로 만들어진 문자열을 반환합니다.

 

문제에서 원하는 결과값이 간결한 편에 속하는 문제들이었던 것 같다.  하루 빨리 마스터가 되서 척척 보기만 해도 생각이 떠오르고 정답이 보이면 좋겠다.