새소식

⌨️ Algorithms/백준

[Python] 백준 1755번_숫자놀이

2023. 3. 7. 19:19

  • -

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

 

1755번: 숫자놀이

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

www.acmicpc.net

 

  • 79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine", 80은 "eight zero"
  • 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로 먼저 옴
  • 정수 M, N(1 ≤ M ≤ N ≤ 99)이 주어지면 M 이상 N 이하의 정수를 숫자 하나씩 읽었을 때를 기준으로 사전순으로 정렬하여 출력하기
  • 입력
    • 첫째 줄에 M과 N이 주어짐
  • 출력
    • M 이상 N 이하의 정수를 문제 조건에 맞게 정렬하여 한 줄에 10개씩 출력
  • 시간 제한: 2초
  • 메모리 제한: 128 MB

 

"""
입출력 예시)

8 28
    -> 8 9 18 15 14 19 11 17 16 13
       12 10 28 25 24 21 27 26 23 22
       20
"""

 

 

## 의사코드 ##

# m 이상 n 이하의 정수를 리스트에 담기

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

# 숫자를 영어로 읽기 

# 사전순으로 정렬

# dic의 key와 value 뒤집기
# v_k_dic = {v:k for k, v in dic.items()}

# 영어를 다시 숫자로 만들기

# 10개씩 출력
# for i in range(0, len(nums), 10):
#     print(*nums[i:i+10])

 

 

 

 

m, n = map(int, input().split())

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

nums = []
# 숫자를 영어로 읽기
for num in range(m, n+1):
    num = str(num)
    str_num = "" # 영어로 읽은 숫자
    for i in range(len(num)):
        str_num = str_num + " " + dic[int(num[i])]
    nums.append(str_num.lstrip())

# 사전순으로 정렬
nums.sort()

# dic의 key와 value 뒤집기
v_k_dic = {v:k for k, v in dic.items()}

# 영어를 다시 숫자로 만들기
for i in range(len(nums)):
    int_num = "" # 다시 숫자로 변환된 숫자
    str_num = nums[i].split()
    for j in str_num:
        int_num += str(v_k_dic[j])
    nums[i] = int(int_num)

# 10개씩 출력
for i in range(0, len(nums), 10):
    print(*nums[i:i+10])

 

 

1) m이상 n이하의 숫자를 영어로 읽어서 nums 리스트에 담기

    - dic 사용 

 

2) nums 리스트를 사전순으로 정렬

 

3) 영어를 다시 숫자로 만들기

    - v_k_dic 사용 (영어를 넣으면 숫자로 반환되도록 dic의 key와 value를 뒤집은 딕셔너리)

 

4) nums 리스트의 요소들을 10개씩 출력

 

 

  • 과정 확인
"""
<숫자를 영어로 읽기> 

num: 8
str_num: eight 

num: 9
str_num: nine 

num: 10
str_num: one zero 

num: 11
str_num: one one 

num: 12
str_num: one two 

num: 13
str_num: one three 

num: 14
str_num: one four 

num: 15
str_num: one five 

num: 16
str_num: one six 

num: 17
str_num: one seven 

num: 18
str_num: one eight 

num: 19
str_num: one nine 

num: 20
str_num: two zero 

num: 21
str_num: two one 

num: 22
str_num: two two 

num: 23
str_num: two three 

num: 24
str_num: two four 

num: 25
str_num: two five 

num: 26
str_num: two six 

num: 27
str_num: two seven 

num: 28
str_num: two eight 

--------------------------------------------------
"""

 

"""
사전순으로 정렬된 nums: ['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'] 
"""

 

"""
<영어를 다시 숫자로 만들기> 

str_num: eight
int_num: 8 

str_num: nine
int_num: 9 

str_num: one eight
int_num: 18 

str_num: one five
int_num: 15 

str_num: one four
int_num: 14 

str_num: one nine
int_num: 19 

str_num: one one
int_num: 11 

str_num: one seven
int_num: 17 

str_num: one six
int_num: 16 

str_num: one three
int_num: 13 

str_num: one two
int_num: 12 

str_num: one zero
int_num: 10 

str_num: two eight
int_num: 28 

str_num: two five
int_num: 25 

str_num: two four
int_num: 24 

str_num: two one
int_num: 21 

str_num: two seven
int_num: 27 

str_num: two six
int_num: 26 

str_num: two three
int_num: 23 

str_num: two two
int_num: 22 

str_num: two zero
int_num: 20 

--------------------------------------------------
"""

 

 

 

 

 

 

https://yunwoong.tistory.com/159

 

[Python] dictionary(딕셔너리) Value로 Key찾기

Python에서 dictionary(딕셔너리) 타입은 immutable한 키(key)와 mutable한 값(value)으로 맵핑되어 있는 순서가 없는 집합입니다. 일반적인 딕셔너리 타입은 중괄호로 되어 있고 키와 값으로 이루어져 있습

yunwoong.tistory.com

 

https://jae04099.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B0%B1%EC%A4%80-11721-%EC%97%B4-%EA%B0%9C%EC%94%A9-%EB%81%8A%EC%96%B4-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0

 

[파이썬] 백준 - 11721: 열 개씩 끊어 출력하기

문제 11721번: 열 개씩 끊어 출력하기 첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다. www.acmicpc.n

jae04099.tistory.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!