본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 숫자놀이 : 1755번 - Python

728x90
반응형

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

 

1755번: 숫자놀이

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

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

(1) [Python] join 함수

-> 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수이다.

ex) ''.join(리스트)

['a', 'b', 'c'] 이런 리스트를 'abc'의 문자열로 합쳐서 반환해주는 함수!

a = ['one2ye', 'loves', '20s']
print(a)
print()

# 리스트를 공백을 두고 합치기
result1 = ' '.join(a)
print(result1)

# 리스트를 문자열로 합치기
result2 = '_'.join(a)
print(result2)


# 출력 결과
>>> ['one2ye', 'loves', '20s']
>>>
>>> one2ye loves 20s
>>> one2ye_loves_20s

 

(2) [Python] 출력문 print(sep = "", end = "")

-> 파이썬의 출력문은 print를 사용하며, 두 개의 옵션을 사용할 수 있다.

 

- sep = " "  : print문의 출력문들 사이에 해당하는 내용을 넣을 수 있다. 기본 값으로는 공백이 들어가있으며 '\n'를 넣어서 줄바꿈을 할 수도 있다.

- end = " " : print문을 이용해 출력을 완료한 뒤의 내용을 수정할 수 있다. 기본 값으로는 개행(\n)이 들어가있으며 개행을 없애거나 원하는 문자를 입력할 수 있다.

 

 

 

문제의 접근 방법

 

- 띄어쓰기로 구분하여 리스트 요소만 추출할 수 있는 join 함수 사용

- 딕셔너리[key]를 사용하여 value값에 접근 가능

 

 

 

내가 막혔던 부분

 

- 무엇을 기준으로 정렬해야 할 지

- 정수를 문자열로 변환하여 두 숫자를 분리하는 방법

- 출력 형식에 맞게 출력하기 (10개 단위로 줄바꿈을 해서 출력하는 방법)

 

 

 

문제 풀이 방법

 

(1) m, n 값을 정수형으로 변환하여 입력 받는다.

(2) 딕셔너리 dic 에 키 값은 숫자, value 값은 영어(문자)로 갖는 쌍을 저장한다. 

(3) m, n+1 사이 범위의 숫자들을 가지고 i 값을 문자열로 형변환 하여 dic[key]값을 이용해서 value를 찾아낸다.

(4) 찾아낸 값을 2차원 배열로 묶어서 리스트 arr에 저장해준다.

(5) 두 번째 값(알파벳) 을 기준으로 정렬해준다.

(6) 10개씩 출력해야 하므로 i를 10으로 나누었을 때 나누어 떨어지면 줄바꿈을 하도록 해준다.

(7) 출력 형식에 맞춰서 출력!

 

 

 

소스코드

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

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

arr = []

for i in range(m, n+1):
    a = ' '.join([dic[j] for j in str(i)])
    arr.append([i,a])

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

for i in range(len(arr)):
    if i%10 == 0 and i != 0:
        print(sep="\n")
    print(arr[i][0], end=" ")
728x90
반응형