종식당
[백준 1755] 숫자놀이 본문
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을 이용하였는데 이 부분은 내가 처음에 접근했었던 문자열 더하기로 처리하면 될 것 같고 리스트에 영어로 바꾼 것과 원래 숫자를 같이 저장하는 부분을 생각하지 못했다. 이렇게 같이 저장하고 정렬만 하면 쉬운 문제였는데 좀 아쉽다. 이런 부분은 문제를 많이 풀어보면서 길러야 할 것 같다.
'백준' 카테고리의 다른 글
[백준 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 |