본문 바로가기
개발/코딩테스트

[Python] 백준 2870 수학숙제 - 문자열

by seopport 2023. 2. 9.
728x90
반응형

백준 홈페이지 문제와 개인적인 풀이를 작성한 글입니다.

 

 

백준 문제 - 2870번 : 수학숙제 

 

2870번: 수학숙제

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

www.acmicpc.net

 


문제

문제 종이에는 숫자와 알파벳 소문자로 되어있는 글자가 N줄있다. 

여기서 숫자를 모두 찾은 뒤, 이 숫자를 비내림차순으로 정리해야한다.

숫자의 앞에 0이 있는 경우에는 정리하면서 생략할 수 있다.

글자를 살펴보다가 숫자가 나오는 경우에는, 가능한 가장 큰 숫자를 찾아야 한다.

즉, 모든 숫자의 앞과 뒤에 문자가 있거나, 줄의 시작 또는 끝이어야 한다.

예를 들어, 01a2b3456cde478에서 숫자를 찾으면 1, 2, 3456, 478이다.

종이에 있는 숫자들을 뽑아내어 비내림차순으로 정리하는 프프로그램을 개발해보자.

 

입력

 

첫째 줄에 종이의 줄의 개수 N이 주어진다. (1 ≤ N ≤ 100)

다음 N개의 줄에는 각 줄의 내용이 주어진다. 각 줄은 최대 100글자이고, 항상 알파벳 소문자와 숫자로만 이루어져 있다.

 

출력

 

종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다.

각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다.

이 때, 비내림차순으로 출력해야 한다.

비내림차순은 내림차순의 반대인 경우인데, 다음 수가 앞의 수보다 크거나 같은 경우를 말한다.

 

코드 

 

# n 개 입력받기 
n = int(input())

# 정답 출력
result = []

# num 값 선정
num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

# 문자열 입력 받기
for i in range(n):
  
  # 한글자씩 끊어 입력받기 strip()
  m = list(input().strip())
  
  str = ""
  arr = []

  for j in m:
    # 숫자가 들어오는 경우
    if j in num:
      str += j
    # 글자열이 들어오는 경우
    else:
        if str != "":
          arr.append(int(str))
        str = ""

  if str != "":
    arr.append(int(str))
  # 전체가 다 숫자일 경우
  for i in arr:
      result.append(i)

# 정렬 하기
result.sort()

for i in result:
  print(i)

 

728x90
반응형