ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.