관리 메뉴

솜씨좋은장씨

[BaekJoon] 1755번 : 숫자놀이 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 1755번 : 숫자놀이 (Python)

솜씨좋은장씨 2021. 9. 8. 17:15
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 숫자놀이 입니다.

백준의 숫자놀이를 파이썬으로 풀이하였습니다.

 

1755번: 숫자놀이

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

www.acmicpc.net

👨🏻‍💻 문제 풀이

입력으로 시작 번호와 끝 번호를 주면

그 사이의 숫자들을 문자로 표현한 값의 순서대로 정렬하고 한 줄에 10개씩 출력하는 문제입니다.

먼저 각 숫자를 문자로 바꾸기 위한 dictionary 값을 하나 만들어주었습니다.

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

이 값을 활용하여 숫자를 문자로 바꾸어주는 함수를 하나 만들었습니다.

def num2string(number, number_dict):
    result = []
    for num in number:
        result.append(number_dict[num])
        
    return " ".join(result)

그 다음 입력 받은 숫자 사이의 숫자 값을 하나씩 꺼내와 문자로 바꿔줍니다.

바꿔준 값을 기준으로 정렬하고 

이를 10개씩 꺼내와 출력하면 끝! 

num1, num2 = map(int, string.split())
    
str_num_list = [(str(num), num2string(str(num), number_dict)) for num in range(num1, num2 + 1)]
    
    
str_num_list = [num[0] for num in sorted(str_num_list, key=lambda x: x[1])]
    
for i in range(len(str_num_list) // 10):
    temp = " ".join([num for num in str_num_list[i*10: (i+1)*10]])
    print(temp)
    
if len(str_num_list) % 10 != 0:
    temp = " ".join([num for num in str_num_list[-1 * ((len(str_num_list)) % 10):]])
    print(temp)

이때 10개씩 꺼내오다가 마지막에 10개가 되지 않는 값은

str_num_list[-1 * ((len(str_num_list)) % 10):]

슬라이싱 방법으로 맨 뒤에서 남은 개수만큼 꺼내왔습니다.

 

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

def num2string(number, number_dict):
    result = []
    for num in number:
        result.append(number_dict[num])
        
    return " ".join(result)
        

def play_number(string, number_dict):
    num1, num2 = map(int, string.split())
    
    str_num_list = [(str(num), num2string(str(num), number_dict)) for num in range(num1, num2 + 1)]
    
    
    str_num_list = [num[0] for num in sorted(str_num_list, key=lambda x: x[1])]
    
    for i in range(len(str_num_list) // 10):
        temp = " ".join([num for num in str_num_list[i*10: (i+1)*10]])
        print(temp)
    
    if len(str_num_list) % 10 != 0:
        temp = " ".join([num for num in str_num_list[-1 * ((len(str_num_list)) % 10):]])
        print(temp)
    
    
if __name__ == "__main__":
    number_dict = {
        "1": "one", "2": "two", "3": "three", "4": "four", "5": "five",
        "6": "six", "7": "seven", "8": "eight", "9": "nine", "0": "zero",
    }
    
    string = input()
    play_number(string, number_dict)
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments