[BOJ] 2870. 수학숙제

Jimeaning·2023년 4월 13일
0

코딩테스트

목록 보기
81/143

Python3

문제

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

키워드

  • 구현

문제 풀이

문제 요구사항

  • 숫자와 알파벳 소문자로 되어있는 글자를 N개 입력 받는다
  • 단어에서 숫자를 모두 찾은 뒤, 이 숫자를 비내림차순으로 정리해야 한다.
  • 숫자가 0으로 시작하는 경우는 정리하면서 생략할 수 있다.
  • 숫자가 나오는 경우에는, 가능한 가장 큰 숫자를 찾아야 한다.
    즉, 모든 숫자의 앞과 뒤에 문자가 있거나, 줄의 시작 또는 끝이어야 한다.

변수 및 함수 설명

n: 줄의 개수(1 ≤ N ≤ 100)
s: 숫자와 알파벳이 포함된 단어
tmp: 숫자만 잘라서 넣은 리스트
cnt: 연속되는 숫자를 담는 문자열. ex) '1', '2', '3456', '478'
words: 모든 숫자가 담기는 리스트

로직

  • 단어의 개수 n을 입력받는다
  • 반복문 (n까지)
    - 단어를 입력받고, tmp와 cnt를 선언한다
    - 반복문을 통해 각 줄 당 한 글자씩 확인한다
- 만약 숫자라면,
	cnt에 j를 더한다
- 만약 숫자가 아니라면,
	- cnt에 값이 있으면, 
		tmp 리스트에 int로 형변환한 cnt를 담고, cnt를 초기화시킨다

- 모든 단어를 확인한 후 만약 cnt에 값이 있으면,
tmp 리스트에 정수형으로 변환한 cnt 값을 넣는다
- 모든 숫자를 words를 리스트 안에 넣는다

  • words를 비내림차순으로 정리한다
  • words를 출력한다

최종 코드

n = int(input())
words = []

for i in range(n):
    s = input()
    tmp = []
    cnt = ''
    
    for j in s:
        if j.isdigit() == True:
            cnt += j
        else:
            if cnt:
                tmp.append(int(cnt))
                cnt = ''
                
    if cnt:
        tmp.append(int(cnt))
        
    words += tmp

words.sort()
for i in words:
    print(i)
   

(+23/5/24)

n = int(input())

ans = []

for _ in range(n):
    s = input()
    num = ''
    
    for i in s:
        if i.isdigit():
            num += i
        else:
            if num:
                ans.append(int(num))
                num = ''
            else:
                num = ''

    if num:
        ans.append(int(num))
    
ans.sort()
for i in ans:
    print(i)

피드백

신경써야 할 조건이 많은 것처럼 보였는데 코드로 간결하게 나타낼 수 있는 문제였다.
cnt는 문자열로 선언해서 숫자가 있을 때마다 해당 숫자를 넣었다.
문자가 들어오면 cnt 값이 있을 때만 tmp 리스트에 cnt 수를 넣고 cnt는 다시 비워줬다.
cnt가 있으면 tmp에 넣고, tmp 리스트를 다시 words에 더하는 식으로 코드가 구성되었다.

참고

https://fre2-dom.tistory.com/356

profile
I mean

0개의 댓글