728x90
[ 문제 ]
https://programmers.co.kr/learn/courses/30/lessons/42746
[ 코드 ]
def solution(numbers):
answer = ''
# numbers를 문자열로 바꿔 str_num에 넣음 (사전값 정렬)
str_num = []
str_num = list(map(str,numbers))
''' (위와 같은 코드)
for n in numbers:
str_num.append(str(n))
'''
# numbers 원소 1000이하 이므로 x*3 (문자열 3번 반복)
# ex. 3 vs 30을 333 vs 303030으로. 앞에서 부터 비교하면 303<333
# 즉, 사전순 오름차순이었으면 3->30임. 하지만 *3하면 30->3
str_num.sort(key=lambda x: x*3, reverse = True)
# sort에서 key값을 기준으로 정렬. 이때 lambda함수 이용가능
# 0000을 '0' 으로 출력하기 위해 int -> str로 변경
answer = str(int(''.join(str_num)))
return answer
* 마지막에 answer = ''.join(str_num) 이렇게만 했더니 딱 하나의 테스트 케이스가 통과되지 않았다.
그래서 검색을 해보니 int로 변경 후 str로 변경해야 한다고 했다.
특히 '0000'의 경우 실제로는 '0'인데 int로 변경하지 않으면 '0000'으로 나온다.
* ''.join(str_num)은 ''를 기준으로 str_num의 원소들을 합쳐라는 의미 이다.
여기서는 따옴표 안에 아무 것도 없기에 연속으로 합쳐라는 의미 이다. (ex. 6210)
문자 +을 기준으로 합치고 싶다면 '+'.join(str_num) 이렇게 이용 가능 하다. (ex. 6+2+10)
반응형
'알고리즘' 카테고리의 다른 글
[ Python ] Softeer 주행거리 비교하기 (0) | 2023.01.14 |
---|---|
[ Python ] Softeer 근무시간 (0) | 2023.01.14 |
[ 정렬 ][ 파이썬 ] 프로그래머스 : k번째수 (0) | 2022.02.27 |
[ 해시 ][ 파이썬 ] 프로그래머스 : 위장 (0) | 2022.02.27 |
[ 해시 ][ 파이썬 ] 프로그래머스 : 전화번호 목록 (1) | 2022.02.26 |