[백준] 1755 숫자놀이

J. Hwang·2024년 12월 20일
0

coding test

목록 보기
63/108

문제

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


내 풀이

a, b = map(int, input().split())

numdict = {1:'one', 2:'two', 3:'three', 4:'four', 5:'five', 6:'six', 7:'seven', 8:'eight', 9:'nine', 0:'zero'}
numdict1 = {k:v for v, k in numdict.items()}

numlist = []
for x in range(a, b+1, 1):
    if x < 10:
        numlist.append(numdict[x])
    else:    # 10 <= x < 100
        y = str(x)
        c, d = numdict[int(y[0])], numdict[int(y[1])]
        numlist.append(c+' '+d)
    
numlist.sort()

answer = []
for x in numlist:
    y = x.split(' ')
    if len(y)==1:
        answer.append(numdict1[y[0]])
    else:    # len(y) == 2
        c, d = str(numdict1[y[0]]), str(numdict1[y[1]])
        e = int(c+d)
        answer.append(e)
    
for i in range(0, len(answer), 10):
    print(*answer[i:i+10])

코멘트

정답이긴 하지만....한눈에 봐도 비효율적인 코드...
그래서 다른 풀이를 봤는데 엄청 간단하게 풀어서 참고해서 다시 푸는 연습을 했다🥲
프린트 형식에 주의하자.

m, n = map(int, input().split())

numdict = {'1':'one', '2':'two', '3':'three', '4':'four', '5':'five', '6':'six', '7':'seven', '8':'eight', '9':'nine', '0':'zero'}

answer = []
for x in range(m, n+1):
    y = ' '.join([numdict[z] for z in str(x)])
    answer.append([x, y])
    
answer.sort(key=lambda x:x[1])

for i in range(len(answer)):
    if i%10 == 0 and i!= 0:
        print()
    print(answer[i][0], end=' ')

References

https://www.acmicpc.net/problem/1755
https://jinho-study.tistory.com/659

profile
Let it code

0개의 댓글