# https://programmers.co.kr/learn/courses/30/lessons/42889
def solution(n, stages):
answer = []
# 계수정렬 생각하고 품
count = [0] * (n + 1)
for i in range(len(stages)):
count[stages[i] - 1] += 1
for j in range(n):
if count[j] == 0:
answer.append([0, j + 1])
else:
answer.append([count[j] / sum(count[j:len(count)]), j + 1])
result = [0] * n
answer = sorted(answer, key=lambda answer: -answer[0])
for k in range(n):
result[k] = answer[k][1]
return result
print(solution(5, [2, 1, 2, 6, 2, 4, 3, 3]))
일정 범위가 존재하기 때문에
계수정렬을 사용했다.
쉽다고 생각했는데 안풀린다...
# https://programmers.co.kr/learn/courses/30/lessons/42746
def solution(numbers):
for i in range(len(numbers)):
numbers[i] = str(numbers[i])
answer = []
numbers = sorted(numbers, key=lambda x: (x * 4)[:4], reverse=True)
if numbers[0] != '0':
answer = "".join(numbers)
else:
return '0'
return answer
print(solution([1,10,2,20]))
처음에 permutations 이용했더니 시간초과가 나왔다.
str을 내림차순으로 정렬하면
20,2,10,1이다.
하지만 최대값은 2 20 1 10 이기 때문에
정렬의 조건을 하나 더 해줘야한다.
고민해보면 20 21 일때는 2 20 이렇게 2가 먼저 나와야하지만
22일때부터는 2가 먼저일 필요가 없다.
따라서 익명함수에 (x * 4)[:4]
집어넣어
x = 2 2222 -> 2222
x = 20 20202020 -> 2020
x = 10 10101010 -> 1010
x = 1 1111 -> 1111
으로 4자리만 비교해서 내림차순 정렬을 하면
2,20,1,10이 나온다.
생가보다 오래걸린 부분은
if numbers[0] != '0':
answer = "".join(numbers)
else:
return '0'
return answer
이 부분이였다.
테스트 케이스가 [0,0,0]이면
0이 나와야한다.
근데 그냥 0을 반환하면 안되고 문자열 '0'을 반환해야한다.
안녕하세요, 김덕우입니다. 카드 정렬 문제를 혼자의 힘으로 푸신 게 정말 대단하다고 생각합니다! 저도 처음에 permutations로 풀었는데 도무지 다른 아이디어가 떠오르지 않더라고요... 수고하셨습니다@!!!