[백준][Python] 1755. 숫자놀이
Silver Ⅳ 🔗1755. 숫자놀이
📝문제 요약
문제
79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 “seven nine”이 된다. 80은 마찬가지로 “eight zero”라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 “eight zero”가 “seven nine”보다 사전순으로 먼저 온다.
문제는 정수 M, N(1 ≤ M ≤ N ≤ 99)이 주어지면 M 이상 N 이하의 정수를 숫자 하나씩 읽었을 때를 기준으로 사전순으로 정렬하여 출력하는 것이다.
입력
첫째 줄에 M과 N이 주어진다.
출력
M 이상 N 이하의 정수를 문제 조건에 맞게 정렬하여 한 줄에 10개씩 출력한다.
✏️문제 풀이
m
과n
을 입력 받음- 각각의 숫자의 문자를 확인하기 위한
numbers
딕셔너리 생성 - 숫자를 영어로 변환하여 저장할
answer
리스트 초기화 m
부터n
까지 순회numbers
에i
가 존재한다면answer
에 문자열로 변환한 값을 추가- 그렇지 않다면 : 2자리수 숫자일 경우
- 숫자를 영어로 저장하기 위한
new_num
문자열 초기화 - 요소를 str로 변환한
i
값을 순회하여 문자열을 찾아 공백을 기준으로answer
에 넣어줌
- 숫자를 영어로 저장하기 위한
answer
을 오름차순 정렬- 10개씩 출력하기 위하여 사용할
count
초기화 answer
을 순회word
안에 공백이 있는 경우- 두자리 이상이므로 공백을 기준으로 나누어줌
- 나누어진 요소들을 순회하여 각각의 영어를 숫자로 바꾸어줌
- 공백이 없는 경우
- 각각의 영어를 숫자로 바꾸어줌
- 카운팅을 하여 10개가 되는지 확인하며 출력
- 10개가 되면 다음 줄에 출력
코드와 함께 보는 풀이
# m과 n을 입력 받음
m, n = map(int, input().split())
# 각각 숫자와 매칭되는 영어를 저장한 numbers 딕셔너리 선언
numbers = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'}
# 숫자를 영어로 변환하여 저장할 answer 리스트 초기화
answer = []
# m부터 n까지 순회
for i in range(m, n+1):
# numbers에 i가 존재한다면 answer에 문자열로 변환한 값을 추가
if i in numbers:
answer.append(numbers[i])
# 그렇지 않다면 : 2자리수 숫자일 경우
else:
# 숫자를 영어로 저장하기 위한 new_num 문자열 초기화
new_num = ''
# 요소를 str로 변환한 i값을 순회하여 문자열을 찾아 공백을 기준으로 answer에 넣어줌
for j in str(i):
new_num += numbers[int(j)] + ' '
answer.append(new_num.strip())
# answer을 오름차순 정렬
answer.sort()
# 10개씩 출력하기 위하여 사용할 count 초기화
count = 0
# answer을 순회
for word in answer:
# word 안에 공백이 있는 경우
if ' ' in word:
# 두자리 이상이므로 공백을 기준으로 나누어줌
digits = word.split()
# 나누어진 요소들을 순회하여 각각의 영어를 숫자로 바꾸어줌
for digit in digits:
for k, v in numbers.items():
if digit == v:
print(k, end='')
# 공백이 없는 경우 각각의 영어를 숫자로 바꾸어줌
else:
for k, v in numbers.items():
if word == v:
print(k, end='')
# 카운팅을 하여 10개가 되는지 확인하며 출력 - 10개가 되면 다음 줄에 출력
count += 1
if count % 10 == 0:
print()
else:
print(' ', end='')
💯제출 코드
m, n = map(int, input().split())
numbers = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'}
answer = []
for i in range(m, n+1):
if i in numbers:
answer.append(numbers[i])
else:
new_num = ''
for j in str(i):
new_num += numbers[int(j)] + ' '
answer.append(new_num.strip())
answer.sort()
count = 0
for word in answer:
if ' ' in word:
digits = word.split()
for digit in digits:
for k, v in numbers.items():
if digit == v:
print(k, end='')
else:
for k, v in numbers.items():
if word == v:
print(k, end='')
count += 1
if count % 10 == 0:
print()
else:
print(' ', end='')
댓글남기기