본문 바로가기
코딩테스트

[백준] 2870 수학숙제 - python

by CuckooBird 2023. 1. 27.

백준 2870 수학문제

https://www.acmicpc.net/problem/2870

 

2870번: 수학숙제

종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차

www.acmicpc.net


코드

방법 1.

import sys
N = int(sys.stdin.readline().rstrip())
num = ["0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9"]
ans = []
for _ in range(N):
    word = sys.stdin.readline().rstrip()
    check = ""
    temp = []
    for i in word:
        if i in num:
            check += i
        else:
            if check:
                temp.append(int(check))
                check = ""
    if check:
        temp.append(int(check))
    ans += temp
ans.sort()
for i in ans:
    print(i)

 

num에는 0에서 9까지의 숫자를 넣었습니다.

입력받은 문자가 num리스트 안에 있다면 check에 넣고, 없다면 else문으로 갑니다.

else문에서는 만약 앞선 check에 숫자로 된 문자열이 있다면 공백을 넣고, 없다면 그냥 넘어갑니다.

 

반복문을 나가서 check에 숫자가 있는지 확인한 뒤에 있다면 temp에 append해주고, temp는 ans에 넣어 ans는 나중에 오름차순 정렬합니다. 

 

방법 2. 정규표현식

import re, sys
N = int(sys.stdin.readline().rstrip())
p = re.compile('[0-9]+')
ans = []
for _ in range(N):
    result = p.findall(sys.stdin.readline().rstrip())
    for x in result:
        ans.append(int(x))
ans.sort()
for i in ans:
    print(i)

Search 🔍

1과 2 모두 찾아 본 내용입니다.

  • check라는 임시 저장소에 문자열 확인 후 빈문자열 혹은 문자열 집어넣기 -> 문자열 처리 하는 방법 중 가장 이해가 잘 되는 방식이었습니다.
  • 정규표현식 import re
  • 파싱