본문 바로가기
algorithm

[PYTHON] 매칭 점수(kakao 2019 프로그래머스)

by onejunu 2020. 9. 10.

정규 표현식 한번 연습해보려고 선택한 문제다.

 

java 보다는 파이썬이 편한거 같아서 파이썬으로 풀어본다.

 

또한 정규표현식에서 아래 링크가 많이 도움이 되었다. 사실 이거보고 다 풀었다... 

 

https://whatisthenext.tistory.com/116

 

[파이썬] 정규표현식(regular expression)

정규표현식 정규표현식(Regular Expressions) re 모듈 : 파이썬 정규 표현식을 지원한다. 파이썬에서는 정규 표현식을 지원하기 위해 re(regular expression) 모듈을 제공한다. 자바(JAVA)에서 패턴 객체(p)의 ��

whatisthenext.tistory.com

 

여기서 쓸만하게 챙겨갈것을 따로 한번 정리해 보려고 한다.

 

먼저 findall은 내가 찾아야 하는 문자열이 얼마나 들어있는 지와 문자열을 다양한 방법으로 분리하고 싶을 때 이용한다.

 

import re
text = "this is String!!"
li = re.findall(r'[\s\S]*',text) 

findall 을 쓰면 list로 반환해준다.

 

참고로 [\s\S]* 는 모든 문자(특수 + 공백 + ... )에 매치된다.

 

findall을 이용하면 문자열의 split도 쉽게 할 수 있다.

 

예를 들어, 

 text = "this is my birthday thank you" 라는 text가 있고 공백 기준으로 나누려고 한다.

즉, ["this","is","my","birthday","thank","you"] 로 결과를 얻고 싶다??

 

re.findall(r'[a-zA-Z]+',text)

 

위 처럼하면 모든 영문자들만 찾아 골라서 list로 만들어 준다.

 

또 한가지더 얻어갈 것이 있다면 search 다. search 는 특정 문자들 사이에 있는 어떠한 문자열을 찾을때 쓰면 유용하다.

 

re.search(r'<meta[^>]*content="https://([\S]*)"/>',text).group(1)

 

만약 위와 같은 코드가 있다면  "https://(찾고자하는 문자열 그룹1번)"  에서 그룹 1번을 String 으로 반환해준다.

 

주소는 모르지만 주소만 쏙 빼서 준다는 것이다.

 

위 2가지만 알면 문제를 푸는 것은 그렇게 큰 고민이 들 지 않는다.

 

문제를 소개하겠다.

 

 

입출력이 조금 지저분 하다.

 

여기서 한가지 고민 했던 점이 있다면 외부 링크 수가 0이라면 어떻게 처리해야하는가? 였는데 처리하는 방법에 대해 어떠한 언급도 없길래 예외 처리를 하지 않았다. 

 

본인은 3가지의 딕셔너리를 선언하였다.

 

urlToIdx = {}
urlToScore = {}
urlToExlink = {}

 

urlToIdx 는 url 을 통해 index를 저장하는 딕셔너리다.

urlToScore는 url에 해당하는 기본점수와 외부링크수를 저장한다.

예를 들어 urlToScore = { 'a.com' : [2,1] } 이라면 a.com의 기본점수는 2이며 외부 링크 수는 1이다.

urlToExlink 는 key 값 참조하고 있는 링크들의 목록이다. 

예를 들어 urlToExlink = { 'a.com' : ['b.com','c.com'] } 이라면 'a.com' 이 참조하고 있는 외부링크가 'b.com','c.com' 이 아니라

'a.com' 을 참조하고 있는 외부링크가 'b.com','c.com' 다. 사실 변수 이름이 exlinkToUrl 이 맞는데 잘못지은듯 하다.

 

이제 코드를 통해 충분히 이해할 수 있을 것이다.

 

댓글