image

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개씩 출력한다.


✏️문제 풀이

  • mn을 입력 받음
  • 각각의 숫자의 문자를 확인하기 위한 numbers 딕셔너리 생성
  • 숫자를 영어로 변환하여 저장할 answer 리스트 초기화
  • m부터 n까지 순회
    • numbersi가 존재한다면 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='')

댓글남기기