ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python challenge-3
    WarGame & 문제풀이/pythonchallenge.com 2019. 8. 20. 10:16

    저번 2 문제에 이어서 이번 3번문제는 다음 주소로 들어간다.

    문제 주소 : http://www.pythonchallenge.com/pc/def/equality.html

     

     

    3 문제를 보면 힌트가 있다.

    One small letter, surrounded by EXACTLY three big bodyguards on each of its sides. 라고 힌트를 준다.

    중요해 보이는 부분을 해석해보면 3명의 보디가드가 양쪽에 있다 라고 대충 추측이 가능하다.

     

    사진을 봐도 큰양초 3 작은양초 1 그다음 큰양초 3개가 놓여져 있다.

    하지만 주어진것은.. 이것뿐이다 그렇다면?

    당연히 소스파일을 뜯어봐야 하는법!!

    소스파일을 확인해 봤더니… 역시나! 저번에 풀었던 2번문제 처럼 주석으로 보기싫은(?) 문장들이 놓여져 있다.

     

    그렇다면 주석부분을 당연히 메모장으로 옮겨야 겠지?

     

    그리고 나서 곰곰히 생각을 해보았다.

    대문자와 소문자로 이루어진 주석의 문장들 그리고 힌트의 3 1 3 형식의 모양..

    뭔가 대문자 3 소문자 1 대문자 3개로 이루어진 것을 찾는 문제 같았다.

     

    그래서 바로 아톰 에디터를 이용해서 코드를 작성했습니다.

    저는 import re string 사용했습니다.

     

     

    1,2번줄 : import 선언

     

    4,5번줄 : 파일입출력을 하기 위해서 읽어올 txt파일과 결과를 담을 txt파일 선언

     

    7 : str 선언 변수 초기화

     

    9~13 :

    10 : f1 있는 문장을 하나씩 line변수에 담기

    11번 줄 : 더 이상 문장이없을때 위한 조건문

    12 : 참일때 while 무한루프 정지.

    13 : str변수에 line 담긴 문장 전부 담기

     

    15번줄 : [re 이용한 형식 컴파일] pattern변수안에 다음과 같이 컴파일

    [a-z][A-Z][A-Z][A-Z][a-z][A-Z][A-Z][A-Z][a-z] <- 소대대대소대대대소

    원래 문제에서는 대대대소대대대 찾으면 되지만 조건을 대대대소대대대 잡으면

    대대대대소대대대대 일때도 참으로 인식하고 대대대대대소대대대대대 일때도 참으로 인식하기 때문에 양쪽 끝에 소를 두는것으로 예외처리를 한다.

     

    기본 형식이 re.compile(pattern , [flags]) pattern 컴파일하여 '정규표현식 객체(regular expression object)' 반환합니다.

     

    16번줄 : sen pattern 컴파일된 형식과 str 들어있는 문장을 비교해서 조건이 참인경우에 리스트로 반환

    합니다.

     

    기본 형식이 re.fundall(pattern , string[, flags]) string에서 pattern 매치되는 모든 경우를 찾아 리스트로 반환합니다.

     

    18~20번줄 :

    18번줄 : 0부터 sen 길이 까지 for 돌리기 

    19번줄 : pattern [A-Z]형식으로 컴파일해서 넣기

    20번줄 : sen i 인덱스에 담아 뒀던 sen[i] 에서 pattern형식의 단어를 공백으로 바꿔줍니다.

    기본 형식이 re.sub(pattern , repl , string [,count]) string 있는 문자열중에서 pattern 일치하는 형식이 있다면 repl 변환해 줍니다.

     

    22~24번줄 :

    22번줄 : 0부터 sen 길이 까지 for 돌리기

    23번줄 : num이라는 변수에 sen[i]안에있는 소문자를 넣습니다. (넣는이유는 예외를미리 배제하기 위해서 소문자를 양쪽끝에 넣어 뒀는데 sen안에 소문자 한개가 아닌 양쪽끝에있는 소문자 까지해서 3개가 문자로 들어있기 때문에 24 줄에서 양쪽에 있는 소문자를 지워야 합니다.)

    24번줄 : sen[i] 원래있던 문자열중에서 가운데 꺼만 다시 담습니다.

     

    26~27번줄 :

    26번줄 : 0부터 sen 길이 까지 for 돌리기

    27번줄 : f2 sen 들어있는 문자써넣기

     

    29~30번줄 : 열었던 파일들 닫아주기

     

    이렇게 코드를 짜서 실행을 하고 L3slv.txt 파일을 열어보면

    처럼 나오게됩니다 ㅎㅎ

     

    linkedlist URL 적용을 해보면

    http://www.pythonchallenge.com/pc/def/linkedlist.html 실행해 보면 고맙게도 조언을 해줍니다.

    html 아닌 php 바꿔주면 되는 거였네요

    http://www.pythonchallenge.com/pc/def/linkedlist.php 들어가시면 Pythonchallenge-4 들어가게 됩니다.

     

     

     

     * https://cafe.naver.com/samsungcomacademy/1252 << Python module-re[정규표현식] 참고 블로그

     

    'WarGame & 문제풀이 > pythonchallenge.com' 카테고리의 다른 글

    python challenge-6  (0) 2019.08.20
    python challenge-5  (0) 2019.08.20
    python challenge-4  (0) 2019.08.20
    python challenge-1  (0) 2018.12.20
    python challenge-0  (0) 2018.12.20

    댓글

Designed by Tistory.