티스토리 뷰

반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이

def solution(numbers):
    answer = ''
    
	# 1. 문자열 리스트로 생성
    str_nums = [str(num) for num in numbers]
	# 2. 각 문자를 모두 3자리 이상으로 만들어 내림차순 정렬
    str_nums.sort(reverse=True, key=lambda x:x*3)
    
	# 3. 답 생성
    for num in str_nums:
        answer += num

	# 4. 답이 '012', '000' 등인 경우가 있으므로 int로 변환 후 다시 str으로 return    
    answer = int(answer)
    
    return str(answer)

풀이과정

  • 정수 리스트를 문자열 리스트로 바꾼다.
  • 모든 글자를 3자리 수 이상으로 만들어 내림차순 정렬한다. (최소 1자리 이므로 *3해준다.)
  • answer를 생성한다.
  • 최소값이 0이 될 수 있으므로 '012', '000'과 같은 answer가 만들어질 수 있다.
    • 따라서 int로 바꾸고, 그 값을 다시 str으로 반환한다.

문자열의 대소 판별

문자열을 비교하는 방식을 제대로 이해하지 못해서 문제에 접근하지 못했다.

두 문자열을 비교할 때는 첫 글자부터 아스키코드 값을 비교하며 대소를 판단한다.

만약 아스키코드가 같다면 길이가 더 긴 문자열을 크다고 판단한다.

 

“9”와 “34” 비교
9의 아스키코드 57, 3의 아스키코드 51
→ 더이상 비교하지 않고 9가 더 크다고 판단함.

“3”과 “30” 비교
두 글자 모두 첫 글자의 아스키코드가 51로 동일
→ 이 경우, 길이가 더 긴 30이 더 크다고 판단함. 

 

 

숫자가 아니라도 마찬가지다.

“ABDHS”와 “D”비교
A의 아스키코드 65, D의 아스키코드 68
→ 더이상 비교하지 않고 D가 더 크다고 판단함.

 


3을 곱하는 이유

이 문제의 경우, “3”과 “30”중 3이 더 크다고 판단되어야한다. 따라서 33과 30이 비교되어야 정상적으로 대소가 판단된다.최대값이 1000이므로 모든 글자를 3자리수 이상으로 만들어서 비교한다. 세 자리까지 모두 비교하므로 “3”, “300” 같은 경우에도 3이 더 크다고 판단할 수 있다. 1000은 0외의 모든 수보다 작다고 판단되므로 굳이 4자리로 만들 필요는 없다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형