본문 바로가기
알고리즘 문제풀이/프로그래머스 고득점 Kit

[프로그래머스] 고득점 Kit - 정렬

by summer_light 2023. 6. 6.

# 내 풀이
# 최초 테스트 케이스는 통과했지만 [454, 45] 같은 경우는 통과하지 못해서 실패했다. 검색해서 확인해보니 *3을 곱해서 이런 케이스를 걸러내는 작업을 한다.
def solution(array, commands):
    return [sorted(array[i-1:j])[k-1] for i,j,k in commands]

# 참고 풀이
# int 인 채로 놔두지 않고, str로 변환한 후에 작업을 시작한다: 문자열 비교와 정수 비교의 비교 방법 차이가 있기 때문이다.
def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))

# 참고 풀이2
# key = functools.cmp_to_key(comparator) 숙지
# a와 b가 int라면 당연히 같겠지만, a와 b가 str일 때를 고려한 설계 
import functools
def comparator(a,b):
    t1 = a+b
    t2 = b+a
    return (int(t1) > int(t2)) - (int(t1) < int(t2)) #  t1이 크다면 1  // t2가 크다면 -1  //  같으면 0

def solution(numbers):
    n = [str(x) for x in numbers]
    n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
    answer = str(int(''.join(n)))
    return answer

# 내 풀이
def solution(citations):
    answer = 0
    citations.sort()

    n = len(citations)
    for i in range(n):
        answer = max(answer, min(citations[i], n - i))

    return answer

# 참고풀이
# enumerate start 변수 지정할 수 있다. 1씩 증가하는 특정 변수로 활용하기 좋겠다.
def solution(citations):
    citations.sort(reverse=True)
    answer = max(map(min, enumerate(citations, start=1)))
    return answer

# 참고풀이2
# l-i 는 점점 작아질 수 밖에 없기 때문에, 조건을 가장 먼저 통과한 값이 최댓값이 됨!
def solution(citations):
    citations = sorted(citations)
    l = len(citations)
    for i in range(l):
        if citations[i] >= l-i:
            return l-i
    return 0

 

댓글