-
1755. [Python]숫자놀이Python_알고리즘/Silver IV 2023. 4. 11. 02:12
1. 문제
2. 접근 방법
- 시간 제한: 2초
- 메모리 제한: 128MB
- 정렬
- 딕셔너리
3. 파이썬 코드
N,M = map(int,input().split()) ans_list = [] num_list = [] for i in range(N,M+1): num_list.append(str(i)) # 들어온 숫자를 문자로 변경할 딕셔너리 num_dict = { "1" : "one", "2" : "two", "3" : "three", "4" : "four", "5" : "five", "6" : "six", "7" : "seven", "8" : "eight", "9" : "nine", "0" : "zero" } # 문자를 다시 숫자로 변환 return_dict = { "one" : "1", "two" : "2", "three" : "3", "four" : "4", "five" : "5", "six" : "6", "seven" : "7", "eight" : "8", "nine" : "9", "zero" : "0" } # 들어온 값의 숫자를 리스트 형태로 문자로 변형하여 저장 for i in num_list: check_list = [] for j in i: check_list.append(num_dict[j]) ans_list.append(check_list) # 문자열로 정렬 ans_list.sort(key=lambda x:x[:]) # 10개 단위로 줄이바뀌므로 체크하는 변수 cnt = 1 # 정렬된 문자열을 다시 숫자로 변환하는 과정 for i in ans_list: answer = "" for j in i: answer += return_dict[j] if cnt == 10: print(answer) cnt = 1 else: print(answer, end=" ") cnt += 1
4. 문제를 풀고난 후 생각
- input 으로 범위가 들어오면 우선 그 범위내의 모든 숫자를 생성한다.
- 딕셔너리를 사용한 이유는 시간 복잡도를 감소시키기 위해서 딕셔너리로 값을 미리 생성해둔다.
- 반복문을 통해서 리스트를 순회하며 숫자를 한개한개 분리하여 문자로 변환해서 새로운 리스트에 저장한다.
=> 18 이 들어오면 1, 8 로 나누어 ["one", eight"] 형태로 리스트 저장하는 방식이다.
=> [["eight"], ["nine"], ["one", "zero"]] 이런 형태로 저장된다. - lambda 정렬을 통해서 리스트 내부를 문자열 내림차순으로 정렬한다.
- 위의 과정을 진행하면 리스트가 정렬된 형태로 존재하며 다시 숫자로 변환해주는 방법으로 딕셔너리에 값을 넣어서 반환해주는 방식을 선택했다.
- 10개 단위로 줄이 바뀌므로 cnt 라는 변수를 생성하여 이를 조절해줬다.
- 정렬을 어떻게 하는지 정도만 알면 나머지 방식은 쉽게 생각할 수 있던 문제였다.
5. 문제를 푸는데 도움이 되는 지식
- lambda를 이용한 정렬
- 딕셔너리
'Python_알고리즘 > Silver IV' 카테고리의 다른 글
1337. [Python]올바른 배열 (0) 2023.04.13 1920. [Python]수 찾기 (0) 2023.04.12 1120. [Python]문자열 (0) 2023.04.09 1235. [Python]학생 번호 (0) 2023.04.01 2578. [Python]빙고 (0) 2023.02.05