티스토리 뷰

2019/11/10 - [Python/심사문제] - 파이썬 도장 심사문제(Unit 42) 풀이(judge_decorator.py)

 

파이썬 도장 심사문제(Unit 42) 풀이(judge_decorator.py)

2019/11/11 - [Python/심사문제] - 파이썬 도장 심사문제(Unit 41) 풀이(judge_coroutine.py) 파이썬 도장 심사문제(Unit 41) 풀이(judge_coroutine.py) 문제 표준 입력으로 사칙연산 계산식이 여러 개 입력됩니다..

editor752.tistory.com

문제

표준 입력으로 URL 문자열이 입력 입력됩니다. 입력된 URL이 올바르면 True, 잘못되었으면 False를 출력하는 프로그램을 만드세요. 이 심사문제에서 판단해야 할 URL의 규칙은 다음과 같습니다.

  1. http:// 또는 https://로 시작
  2. 도메인은 도메인.최상위도메인 형식이며 영문 대소문자, 숫자, -로 되어 있어야 함
  3. 도메인 이하 경로는 /로 구분하고, 영문 대소문자, 숫자, -, _, ., ?, =을 사용함

입력-결과 예시

입력 1

http://www.example.com/hello/world.do?key=python

결과 1

True

입력 2

https://example/hello/world.html

결과 2

False

해설

  1. 정규식을 사용해야 하므로 regular expression 모듈을 가져와야 한다.

    import re

  2. 표준 입력으로 검사하고자 하는 주소를 입력받는다.

    url = input()

  3. 문자열이 작성 서식에 일치하는지 알아보기 위해서 match() 함수를 이용한다.

    re.match('작성 서식', '대상 문자열')

  4. 작성 서식을 정규식으로 표현한다.

    1. http:// 또는 https://로 시작

      • ^(http://|https://) 또는 ^http[s]*://
        전자는 후자에 비해 길어 타이핑에 귀찮지만, 후자의 경우는 ’httpssss://’와 같은 오타를 걸러내지 못한다. 그러니 귀찮아도 전자가 더 안전한 방법이다. 문자열의 시작이기 때문에 시작임을 나타내는 ^를 사용하였다.
        도메인은 도메인.최상위도메인 형식이며 영문 대소문자, 숫자, -로 되어 있어야 함.

      • [a-zA-Z0-9-\.]+\.([a-zA-zZ0-9]+)/
        최상위 도메인(TLD)의 형식이라는 게 ‘

        .com’ 또는 ‘

        .

        ~

        .com’이라고 본다. 영문 대소문자(a-ZA-Z), 숫자(0–9), 하이픈(-)를 허용하고 ’.com’ 앞에 ‘.(dot)‘이 오는 경우(www.)를 고려하여 허용 문자로 ’.‘도 추가한다. 이 문자들이 최소 1번 이상 출현해야 하므로 이 서석 뒤에 ’+’를 준다. 그 다음에 반드시 ’.’이 출현한 다음 다시 영문 대소문자, 숫자, 하이픈을 허용해야 한다. 최상위 도메인 다음은 슬러시(/)로 구분되므로 /까지 추가한다. 이때 입력이 http://www.gungmin.com과 같은 경우를 true로 처리하고자 한다면 마지막 슬러시는 (/)*로 바꾸어야 한다.
        도메인 이하 경로는 /로 구분하고, 영문 대소문자, 숫자, -, _, ., ?, =을 사용함.

      • [a-zA-Z0-9-=_,\./]*
        이하 내용 역시 작성 서식에 따라 정규식을 작성하면 된다.(방법은 2를 참고). 최상위 정규식 다음 주소가 없을 수 있으므로 이 정규식 다음에는 *(0 이상 출현)을 붙인다. 슬러시(/)로 구분되는 세부 주소가 이어질 수 있다는 점에서 위에서 제시된 문자와 함께 슬러시(/)까지 허용 문자로 추가해야 한다는 점에 주의한다.

  5. 4에서 완성한 re.match('^(http://|https://)[a-zA-Z0-9-\.]+\.([a-zA-zZ0-9]+)/[a-zA-Z0-9-=_,\./]*', url)를 if문으로 검사하여 참이면 result에 True를 넣고 거짓이면 result에 False를 넣는다.

  6. result를 출력한다.

소스 코드


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
05-18 17:43