종식당

[백준 1755] 숫자놀이 본문

백준

[백준 1755] 숫자놀이

종식당 2024. 1. 31. 18:09
728x90
반응형

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

 

1755번: 숫자놀이

79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로

www.acmicpc.net

  • 문제 해석

먼저 입력으로 두 숫자를 받는다. 그리고 두 수 사이에 존재하는 숫자들을 정렬해서 출력할 것이다. 이때 비교 조건은 다음과 같다. 8은 eight, 10은 one zero로 나타낼 수 있고 수를 비교할 때 영어로 바꿨을 때 사전 순으로 비교하여 정렬한다.

그 후 한 줄에 10개씩 출력하면 된다.

 

문제를 보고 먼저 딕셔너리를 사용해야 할 것 같다는 생각이 들었다. 숫자를 문자로 key에 저장하고 해당 value를 eight 이런 식으로 영어로 저장해야겠다고 생각했다. 그리고 M부터 N+1까지 숫자를 문자로 바꾼 후 for문을 돌면서 문자에 해당하는 value값을  리스트에 저장하고 정렬하여 접근하려고 했다.

M, N = map(int, input().split())
my_dict = {"0": "zero", "1": "one", "2": "two", "3": "three", "4": "four", "5": "five", "6": "six", "7": "seven", "8": "eight", "9": "nine"}

lst = []
for num in range(M, N + 1):
    answer = ""
    for i in str(num):
        if i in my_dict:
            answer += my_dict[i]
            answer += " "
    lst.append(answer)

lst.sort()

result = []
for num in lst:
    result.append(num.split())

print(result)
#[['eight'], ['nine'], ['one', 'eight'], ['one', 'five'], ['one', 'four'], ['one', 'nine'], ['one', 'one'], ['one', 'seven'], ['one', 'six'], ['one', 'three'], ['one', 'two'], ['one', 'zero'], ['two', 'eight'], ['two', 'five'], ['two', 'four'], ['two', 'one'], ['two', 'seven'], ['two', 'six'], ['two', 'three'], ['two', 'two'], ['two', 'zero']]

 

일단 영어로 정렬까지는 했는데 숫자로 출력을 해야해서 이 value값(영어)으로 key값을 알아내야 하는 상황인데 여기서 막혀버렸다. dict.keys()나 for key, value in dict.items()로 접근하여 해결하려고 했지만 삼중 for문을 돌면서 코드가 복잡해졌다.

 

  • 제출 코드
M, N = map(int, input().split())
dict = {"0": "zero", "1": "one", "2": "two", "3": "three", "4": "four", "5": "five", "6": "six", "7": "seven", "8": "eight", "9": "nine"}

lst = []
for num in range(M, N + 1):
    a = "".join(dict[i] for i in str(num))
    lst.append([num,a])

lst.sort(key = lambda x: x[1])

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

 

처음에 M부터 N+1까지 for문을 돌 때 join을 이용하였는데 이 부분은 내가 처음에 접근했었던 문자열 더하기로 처리하면 될 것 같고 리스트에 영어로 바꾼 것과 원래 숫자를 같이 저장하는 부분을 생각하지 못했다. 이렇게 같이 저장하고 정렬만 하면 쉬운 문제였는데 좀 아쉽다. 이런 부분은 문제를 많이 풀어보면서 길러야 할 것 같다.

728x90
반응형

'백준' 카테고리의 다른 글

[백준 11053, 12015] 가장 긴 증가하는 부분 수열 1, 2  (1) 2024.02.08
[백준 20291] 파일 정리  (0) 2024.02.01
[백준 10814] 나이 순 정렬  (2) 2024.01.31
[백준 2108] 통계학  (0) 2024.01.19
[백준 10845] 큐  (0) 2024.01.17