백준 벨로그는 너무 귀찮아서;;

iwtkmn_0219·2023년 1월 20일
0

잡동사니

목록 보기
1/1
post-thumbnail

잡담

요 며칠간 다시 백준을 풀면서 같이 벨로그에도 기록하는 중인데 마크다운 쓰는게 여간 귀찮은 일이었다. 문제도 긁어와야하고.. 문제 번호도 일일히 입력하고.. 풀이도 써야하고.. 근데 여기서 문제랑 문제 번호는 긁어올 수 있지 않나?!

그래서 큰 틀을 짜주는 프로그램을 만들었다!

지금까지는 같이 만들거나 도움받아서 개발해왔는데, 처음으로 누구의 도움도 없이(구글은 빼고) 무언가 나에게서 결과물이 나와서 기분이 좋다..ㅎㅎ (파이썬 크롤링 기초도 몰랐기에 꽤 고생했지만..)

물론 예외처리는 물론이고 콘솔창에 입력하는 등.. 투박하기도 하고 문제도 많지만.. 뭐 그건 미래의 내가 할거니까!

간단하게 코드 살짝 올리면서 짧게 마무리하겠다

코드

from urllib.request import urlopen, Request
import re


def write_file(problem_number: int) -> None:
    f = open("text.txt", "w", encoding="utf8")

    # Input problem number and get data
    url = "https://www.acmicpc.net/problem/" + str(problem_number)
    req = Request(url, headers={"User-Agent": "Mozilla/5.0"})
    html = urlopen(req)
    boj_contents = str(html.read().decode("utf8"))

    # Get text
    TITLE_REGULAR_EXPRESSION = "(<title>)([\w\W]+)(</title>)"
    boj_title = re.findall(TITLE_REGULAR_EXPRESSION, boj_contents)[0][1].split(": ")[1]
    velog_title = f"[백준 Python] {problem_number}{boj_title}"
    main_contents = f"[백준 {problem_number} {boj_title}]({url})"
    PROBLEM_REGULAR_EXPRESSION = "(<h2>문제)([\s\S]+?)(</section>)"
    problem = re.findall(
        "(<p>)([\s\S]+?)(</p>)",
        re.findall(PROBLEM_REGULAR_EXPRESSION, boj_contents)[0][1],
    )
    INPUT_REGULAR_EXPRESSION = "(<h2>입력)([\s\S]+?)(</section>)"
    input_ = re.findall(
        "(<p>)([\s\S]+?)(</p>)",
        re.findall(INPUT_REGULAR_EXPRESSION, boj_contents)[0][1],
    )
    OUTPUT_REGULAR_EXPRESSION = "(<h2>출력)([\s\S]+?)(</section>)"
    output = re.findall(
        "(<p>)([\s\S]+?)(</p>)",
        re.findall(OUTPUT_REGULAR_EXPRESSION, boj_contents)[0][1],
    )

    f.write(velog_title + "\n\n")
    f.write("백준\npython\n\n")
    f.write(main_contents + "\n\n")
    f.write("## 문제\n")
    for p in problem:
        f.write(p[1] + "\n\n")
    f.write("## 입력\n")
    for i in input_:
        f.write(i[1] + "\n\n")
    f.write("## 출력\n")
    for o in output:
        f.write(o[1] + "\n\n")
    f.write("## 풀이 및 회고\n")
    f.write("### 풀이\n\n")
    f.write("### 회고\n\n")
    f.write("## 코드\n```python\n\n```\n")
    f.write(
        f"[>> iwtkmn0219의 Github <<](https://github.com/iwtkmn0219/boj/blob/main/python/{problem_number}.py)"
    )
    f.close()


print("문제 번호를 입력하세요:", end=" ")
write_file(int(input()))

결과물

입력: 14003

[백준 Python] 14003번 가장 긴 증가하는 부분 수열 5

백준
python

[백준 14003 가장 긴 증가하는 부분 수열 5](https://www.acmicpc.net/problem/14003)

## 문제
수열 A가 주어졌을 때, 가장 긴 증가하는&nbsp;부분&nbsp;수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분&nbsp;수열은&nbsp;A = {<strong>10</strong>,&nbsp;<strong>20</strong>, 10,&nbsp;<strong>30</strong>, 20,&nbsp;<strong>50</strong>} 이고, 길이는 4이다.

## 입력
첫째 줄에 수열 A의 크기 N (1 &le; N &le; 1,000,000)이 주어진다.

둘째 줄에는 수열 A를 이루고 있는 A<sub>i</sub>가 주어진다. (-1,000,000,000&nbsp;&le; A<sub>i</sub>&nbsp;&le; 1,000,000,000)

## 출력
첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.

둘째 줄에는 정답이 될 수 있는 가장 긴 증가하는 부분 수열을 출력한다.

## 풀이 및 회고
### 풀이

### 회고

## 코드
\```python

\```
[>> iwtkmn0219의 Github <<](https://github.com/iwtkmn0219/boj/blob/main/python/14003.py)

>> iwtkmn0219의 Github <<

0개의 댓글