๐Ÿ“š Study/Baekjoon

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv2 | ์ •๋ ฌ | ๊ฐ€์žฅ ํฐ ์ˆ˜

์œฐ๊ฐฑ 2025. 10. 9. 22:04

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

 

2026.04.03

์ฒ˜์Œ์— permutationํ–ˆ๋‹ค๊ฐ€ numbers ํฌ๊ธฐ๋ณด๊ณ  ์•„์ฐจ ์‹ถ์—ˆ๋‹ค..

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•˜์ง€ ํ•˜๋‹ค๊ฐ€,, cmt_to_key ํ•จ์ˆ˜๋Š” ๊ธฐ์–ต ๋ชปํ•  ๊ฒƒ ๊ฐ™์•„์„œ *3์„ ํ•ด๋ฒ„๋ฆผ

def solution(numbers):
    # permutation์„ ํ•˜๊ธฐ์— numbers ๋ฐฐ์—ด์ด ๋„ˆ๋ฌด ํฌ๋‹ค
    # ์ตœ์ ํ™”ํ•ด์„œ ํ•ด์•ผ ํ•จ
    # ๋ˆ„๊ฐ€ ํฌ๋‹ค๊ณ  ์—ฌ๊ธธ๊นŒ? ์ฒซ๋ฒˆ์งธ ๋‚˜์˜ค๋Š” ์ˆซ์ž๊ฐ€ ํฐ ์• ๊ฐ€ ์•ž์œผ๋กœ ๊ฐ€์•ผ ํ•จ
    # ๊ทผ๋ฐ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ž , 0์ด ๋“ค์–ด๊ฐ„ ๊ฒฝ์šฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ์ˆซ์ž๊ฐ€ ์žˆ์„ ๋•Œ, 10 vs 1 ์ด๋ผ๋ฉด -> 1์ด ๋จผ์ € ์˜ค๋Š”๊ฒŒ ๋งž์Œ
    numbers_str = [str(num) for num in numbers]
    numbers_str.sort(key=lambda x: (x*3), reverse=True)
    answer = ''.join(numbers_str)
    
    return answer

 

๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„๋„ ๊ฐ€๋Šฅํ•ด

-1์ด๋ฉด ์•ž, 1์ด๋ฉด ๋’ค, 0์ด๋ฉด ๊ฐ™์Œ์„ ์˜๋ฏธ

from functools import cmp_to_key

def solution(numbers):
    # permutation์„ ํ•˜๊ธฐ์— numbers ๋ฐฐ์—ด์ด ๋„ˆ๋ฌด ํฌ๋‹ค
    # ์ตœ์ ํ™”ํ•ด์„œ ํ•ด์•ผ ํ•จ
    # ๋ˆ„๊ฐ€ ํฌ๋‹ค๊ณ  ์—ฌ๊ธธ๊นŒ? ์ฒซ๋ฒˆ์งธ ๋‚˜์˜ค๋Š” ์ˆซ์ž๊ฐ€ ํฐ ์• ๊ฐ€ ์•ž์œผ๋กœ ๊ฐ€์•ผ ํ•จ
    # ๊ทผ๋ฐ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ž , 0์ด ๋“ค์–ด๊ฐ„ ๊ฒฝ์šฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ์ˆซ์ž๊ฐ€ ์žˆ์„ ๋•Œ, 10 vs 1 ์ด๋ผ๋ฉด -> 1์ด ๋จผ์ € ์˜ค๋Š”๊ฒŒ ๋งž์Œ
    numbers_str = [str(num) for num in numbers]
    numbers_str.sort(key=cmp_to_key(lambda a,b: (b+a>a+b)-(b+a<a+b)))
    answer = ''.join(numbers_str)
    
    return answer

 

 


์‹œ๋„ 1 >> ์‹œ๊ฐ„ ์ดˆ๊ณผ (๋ฒ„๋ธ”์ •๋ ฌ) >>> 60

def sort(str_numbers):
    for i in range(len(str_numbers)):
        for j in range(i+1, len(str_numbers)):
            c_1 = str_numbers[i] + str_numbers[j]
            c_2 = str_numbers[j] + str_numbers[i]
            if c_1 < c_2: # SWAP
                str_numbers[i], str_numbers[j] = str_numbers[j], str_numbers[i]
                
def solution(numbers):
    str_numbers = [str(num) for num in numbers]
    sort(str_numbers)
    answer = ''
    for str_n in str_numbers:
        answer+=str_n
    
    return answer

 

์‹œ๋„ 2 >> cmp_to_key

cmp_to_key๋Š” ํŒŒ์ด์ฌ์—์„œ ์ •๋ ฌํ•  ๋•Œ ๊ธฐ์กด์˜ ๋น„๊ต ํ•จ์ˆ˜(comparator)๋ฅผ ํ‚ค ํ•จ์ˆ˜(key function)๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋„๊ตฌ

from functools import cmp_to_key

def compare(a, b):
    if a + b < b + a:
        return 1
    elif a + b > b + a:
        return -1
    else:
        return 0

def solution(numbers):
    str_numbers = [str(num) for num in numbers]
    str_numbers.sort(key=cmp_to_key(compare))
    answer = ''.join(str_numbers)
    return '0' if answer[0] == '0' else answer