🐍 Python/solve-algorithm

λ°±μ€€ 1755 [μˆ«μžλ†€μ΄] : 파이썬 & λ¬Έμžμ—΄ μ •λ ¬ (with maketrans & translate, join)

imdona 2021. 12. 26. 20:27

πŸ“Œ 문제 

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

 

1755번: μˆ«μžλ†€μ΄

79λ₯Ό μ˜μ–΄λ‘œ 읽되 숫자 λ‹¨μœ„λ‘œ ν•˜λ‚˜μ”© μ½λŠ”λ‹€λ©΄ "seven nine"이 λœλ‹€. 80은 λ§ˆμ°¬κ°€μ§€λ‘œ "eight zero"라고 μ½λŠ”λ‹€. 79λŠ” 80보닀 μž‘μ§€λ§Œ, μ˜μ–΄λ‘œ 숫자 ν•˜λ‚˜μ”© μ½λŠ”λ‹€λ©΄ "eight zero"κ°€ "seven nine"보닀 μ‚¬μ „μˆœμœΌλ‘œ

www.acmicpc.net


πŸ” 풀이 

1. 첫번째 μ‹œλ„ 

일단 ν’€μ–΄λ³Έ 방법 !

  

[전체 μ½”λ“œ]

'''μ΅œμ’… 제좜 μ½”λ“œ'''
M , N = map(int, input().split())
num_list = [str(i) for i in range(M, N + 1)]

def convert_to_str(txt):
    dictionary = {'0':'zero', '1':'one', '2':'two', '3':'three', '4':'four', '5':'five', '6':'six', '7':'seven', '8':'eight', '9':'nine'}
    transTable = txt.maketrans(dictionary)
    txt = txt.translate(transTable)
    return txt

alphabet_list = []
for num in num_list:
    if len(num) == 1:
        alphabet_list.append((num, convert_to_str(num)))
    else:
        alphabet_list.append((num, convert_to_str(num[0]) + " " + convert_to_str(num[1])))

alphabet_list.sort(key = lambda x : (x[1]))

for i in range(len(alphabet_list)):
    if i % 10 == 0 and i!=0:
        print(sep = '\n')
    print(alphabet_list[i][0], end=" ")

[ν•΄μ„€]

'''μ½”λ“œμ™€ ν•¨κ»˜ 풀이 μ„€λͺ…'''
# input κ°’ λ°›κ³ , MλΆ€ν„° NκΉŒμ§€ 숫자λ₯Ό string 데이터 νƒ€μž…μœΌλ‘œ λ°›μ•„ 리슀트λ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.
# πŸ₯• tip : range(start,stop)μ—μ„œ stip-1κΉŒμ§€μ˜ λ²”μœ„κΉŒμ§€λ§Œ ν•΄λ‹Ήλ˜λ―€λ‘œ NκΉŒμ§€ ν•˜λ €λ©΄ N+1으둜 ν•΄μ•Ό ν•œλ‹€
M , N = map(int, input().split())
num_list = [str(i) for i in range(M, N + 1)]

# 숫자λ₯Ό μ•ŒνŒŒλ²³μœΌλ‘œ λ°”κΏ”μ£ΌλŠ” ν•¨μˆ˜ λ§Œλ“€μ–΄μ£ΌκΈ° - μ•„λž˜μ—μ„œ μžμ„Έν•˜κ²Œ λ‹€λ£° μ˜ˆμ •!πŸ”
def convert_to_str(txt):
    dictionary = {'0':'zero', '1':'one', '2':'two', '3':'three', '4':'four', '5':'five', '6':'six', '7':'seven', '8':'eight', '9':'nine'}
    transTable = txt.maketrans(dictionary)
    txt = txt.translate(transTable)
    return txt

'''숫자 -> μ•ŒνŒŒλ²³μœΌλ‘œ λ°”κΎΈλŠ”λ°
ν•œμžλ¦¬ 수이면 λ°”λ‘œ, 
두 자리 수이면 'two', 'seven'을 'two seven'처럼 μŠ€νŽ˜μ΄μŠ€λ°” ν•˜λ‚˜λ₯Ό 두고 λ„£μ–΄μ€€λ‹€
(input κ°’μ˜ μ΅œλŒ“κ°’μ΄ 99이기 λ•Œλ¬Έμ— ν•œμžλ¦¬ or 두 μžλ¦¬μˆ˜μ΄λ‹€)'''
alphabet_list = []
for num in num_list:
    if len(num) == 1:
        alphabet_list.append((num, convert_to_str(num)))
    else:
        alphabet_list.append((num, convert_to_str(num[0]) + " " + convert_to_str(num[1])))

# μ •λ ¬ν•˜κΈ° - x[1]을 κΈ°μ€€μœΌλ‘œ ν•œλ‹€ : μ•ŒνŒŒλ²³μ„ κΈ°μ€€μœΌλ‘œ ν•œλ‹€λŠ” 뜻
# 리슀트 μ›μ†Œ ν˜•νƒœκ°€ ['1', 'one'] 이런 식이라 1번째 인덱슀 번호λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•œλ‹€λŠ” 뜻!
# πŸ”μ•„λž˜μ— μ°Έκ³  링크 확인!
alphabet_list.sort(key = lambda x : x[1])

# 10개λ₯Ό κΈ°μ€€μœΌλ‘œ μ€„λ°”κΏˆ('\n')을 λ„£μ–΄μ€€λ‹€.
for i in range(len(alphabet_list)):
    if i % 10 == 0 and i!=0:
        print(sep = '\n')
    print(alphabet_list[i][0], end=" ")

  

πŸ” 숫자λ₯Ό μ•ŒνŒŒλ²³μœΌλ‘œ λ°”κΏ”μ£ΌλŠ” ν•¨μˆ˜ μ•Œμ•„λ³΄κΈ° : μ—¬λŸ¬ 문자λ₯Ό λŒ€μ²΄ν•˜λŠ” ν•¨μˆ˜ maketrans( ) & translate( )

1. maketrans( ) λ©”μ„œλ“œλŠ” translate( ) λ©”μ„œλ“œμ™€ ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ μ§€μ •λœ 문자λ₯Ό λ°”κΏ€ 수 μžˆλŠ” λ§€ν•‘ ν…Œμ΄λΈ”μ„ λ°˜ν™˜ν•¨

2. string.maketrans( ) : μ›λž˜ λ¬Έμžμ—΄κ³Ό λŒ€μ²΄ λ¬Έμžμ—΄ κ°„μ˜ λ§€ν•‘ ν…Œμ΄λΈ”μ„ λ°˜ν™˜ν•¨

3. string.translate( ) : μ§€μ •λœ 일뢀 λ¬Έμžκ°€ μ‚¬μ „μ΄λ‚˜ λ§€ν•‘ ν…Œμ΄λΈ”μ— μ„€λͺ…λœ 문자둜 λŒ€μ²΄λ˜λŠ” λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•¨ ➑️ μ—¬κΈ°μ„œλŠ” maketrans( )κ°€ λ°˜ν™˜ν•œ ν…Œμ΄λΈ”μ„ λ²ˆμ—­ν•˜λŠ” μ—­ν• βœ¨

4. string.maketrans(x, y, z)의 νŒŒλΌλ―Έν„° μ•Œμ•„λ³΄κΈ°

Parameter Description
x Required parameter(ν•„μˆ˜)
- λ§€κ°œλ³€μˆ˜κ°€ ν•˜λ‚˜λ§Œ μ§€μ •λœ 경우 : ꡐ체λ₯Ό μˆ˜ν–‰ν•˜λŠ” 방법을 μ„€λͺ…ν•˜λŠ” dictionaryμ—¬μ•Ό 함
- λ‘κ°œ 이상 : λ°”κΏ€ λ¬Έμžμ—΄
y optional parameter
- xλ₯Ό λŒ€μ²΄ν•˜λŠ” λ¬Έμžμ—΄(x와 λ¬Έμžμ—΄ 길이가 κ°™μ•„μ•Ό 함)
z optional parameter
- μ›λž˜ λ¬Έμžμ—΄μ—μ„œ μ œκ±°ν•  λ¬Έμžμ—΄

5. string.translate(table) νŒŒλΌλ―Έν„° table : Required parameter(ν•„μˆ˜), ꡐ체λ₯Ό μˆ˜ν–‰ν•˜λŠ” λ°©λ²•을 μ„€λͺ…ν•˜λŠ” μ‚¬μ „ λ˜λŠ” λ§€ν•‘ ν…Œμ΄λΈ”

6. μ˜ˆμ‹œ μ½”λ“œ

# 같은 길이의 문자만 변경이 λœλ‹€
txt = "Hi I am Dona!"
x = "I"
y = "i"
mytable = txt.maketrans(x, y)
print(txt.translate(mytable)) # Hi i am Dona!

 

     

         

πŸ” 리슀트 μ •λ ¬ κ΄€λ ¨ μ°Έκ³  링크 : https://imdona.tistory.com/14

 

[python] List(2) list sorting : 닀쀑 쑰건 μ •λ ¬ & λ°±μ€€ 1181번[단어 μ •λ ¬]

HelloπŸ‘‹ I'm Dona!:) μ§€λ‚œ ν¬μŠ€νŒ…μ— μ΄μ–΄μ„œ μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œμ—μ„œ 자주 μ“°μ΄λŠ” 닀쀑 쑰건 정렬에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. sort와 sorted의 documentation μ†Œκ°œλŠ” μ§€λ‚œ ν¬μŠ€νŒ… μ°Έκ³ ν•΄μ£Όμ„Έμš”! ⬇️⬇️⬇️⬇️⬇

imdona.tistory.com


2. λ‘λ²ˆμ§Έ μ‹œλ„ 

κΉ”λ”ν•˜κ²Œ μ •λ¦¬ν•˜κΈ°πŸ§Ή

maketrans( )& translate( ) λ©”μ†Œλ“œκ°€ μ•„λ‹ˆλΌ, λ”•μ…”λ„ˆλ¦¬μ™€ join λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ μΆ©λΆ„νžˆ λ”μš± κ°„λ‹¨ν•˜κ²Œ 풀이할 수 μžˆλ‹€.

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'}

alphabet_list = []
for i in range(M, N + 1):
    alphabet = ' '.join([dict[j] for j in str(i)])
    alphabet_list.append([i, alphabet])

alphabet_list.sort(key = lambda x : x[1])

for i in range(len(alphabet_list)):
    if i % 10 == 0 and i != 0:
        print(sep = '\n')
    print(alphabet_list[i][0], end = " ")

πŸ” joinν•¨μˆ˜ κ°„λ‹¨ν•˜κ²Œ 정리

  1. μ–΄λ–€ ν•¨μˆ˜μΈκ°€μš”? λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ λ¦¬μŠ€νŠΈμ— μžˆλŠ” μš”μ†Œ ν•˜λ‚˜ν•˜λ‚˜λ₯Ό ν•©μ³μ„œ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ λ°”κΎΈμ–΄ λ°˜ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜!
  2. ''.join(리슀트) : λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ 리슀트λ₯Ό λ¬Έμžμ—΄λ‘œ ν•©μ³μ„œ 리턴
  3. ' ' μ•ˆμ— λ“€μ–΄κ°€λŠ” 값이 κ΅¬λΆ„μž!
  4. μ˜ˆμ‹œμ½”λ“œ
## 예제 1
my_list = ['a', 'b', 'c']
print(''.join(my_list))
# out : abc

## 예제 2
coordinate_list = ['1 -1\n', '1 2\n', '2 2\n', '3 3\n', '0 4\n']
print(''.join(coordinate_list))
'''
out :
1 -1
1 2
2 2
3 3
0 4
'''

## 예제 3
my_list = ['a', 'b', 'c']
print("--".join(my_list))
# out : a--b--c

 


πŸ™ RERENCE