[Node.js_4기] 코드카타 : 가장 큰 수 (24/03/11)
2024. 3. 12. 09:43ㆍ공부/코테준비
목차
1. 문제
코딩테스트 연습 - 가장 큰 수 | 프로그래머스 스쿨 (programmers.co.kr)
2. 시도
function solution(numbers) {
let answer = numbers
.map(n=>n.toString())
.sort((a,b)=>(b+a)-(a+b))
.join('')
return answer;
}
테스트 1 〉 | 통과 (130.28ms, 43.4MB) |
테스트 2 〉 | 통과 (67.41ms, 42.2MB) |
테스트 3 〉 | 통과 (167.01ms, 45MB) |
테스트 4 〉 | 통과 (3.86ms, 36.3MB) |
테스트 5 〉 | 통과 (113.46ms, 44.8MB) |
테스트 6 〉 | 통과 (111.35ms, 44.6MB) |
테스트 7 〉 | 통과 (0.15ms, 33.6MB) |
테스트 8 〉 | 통과 (0.13ms, 33.6MB) |
테스트 9 〉 | 통과 (0.13ms, 33.6MB) |
테스트 10 〉 | 통과 (0.13ms, 33.4MB) |
테스트 11 〉 | 실패 (0.21ms, 33.4MB) |
테스트 12 〉 | 통과 (0.08ms, 33.4MB) |
테스트 13 〉 | 통과 (0.05ms, 33.6MB) |
테스트 14 〉 | 통과 (0.07ms, 33.5MB) |
테스트 15 〉 | 통과 (0.05ms, 33.4MB) |
케이스 11은 0으로 이루어진 문자열이 생성된다고 한다. 이를 예외처리 해주는 것으로 해결할 수 있다.
3. 결과
function solution(numbers) {
let answer = numbers
.map(n=>n.toString())
.sort((a,b)=>(b+a)-(a+b))
.join('')
return answer[0]=='0'?'0':answer;
}
테스트 1 〉 | 통과 (202.95ms, 43.4MB) |
테스트 2 〉 | 통과 (101.62ms, 42.4MB) |
테스트 3 〉 | 통과 (265.22ms, 45MB) |
테스트 4 〉 | 통과 (8.72ms, 36.2MB) |
테스트 5 〉 | 통과 (202.86ms, 45.3MB) |
테스트 6 〉 | 통과 (114.98ms, 44.1MB) |
테스트 7 〉 | 통과 (0.14ms, 33.5MB) |
테스트 8 〉 | 통과 (0.13ms, 33.4MB) |
테스트 9 〉 | 통과 (0.23ms, 33.4MB) |
테스트 10 〉 | 통과 (0.21ms, 33.5MB) |
테스트 11 〉 | 통과 (0.20ms, 33.5MB) |
테스트 12 〉 | 통과 (0.08ms, 33.5MB) |
테스트 13 〉 | 통과 (0.06ms, 33.6MB) |
테스트 14 〉 | 통과 (0.07ms, 33.6MB) |
테스트 15 〉 | 통과 (0.09ms, 33.5MB) |
삼항 연산자를 사용한 예외처리
4. 배운점
그냥 sort()만 사용하면 [1,2,3,100]을 [1,100,2,3]으로 정렬하는 문제가 있다.
이를 해결하기 위한 sort((a,b)=>b-a) : 두 값의 차를 계산하여 차가 양수면 b가 앞, 음수면 a가 앞.
조합이 아닌 각 숫자간의 비교.
- a=100,b=3일때 b-a로 비교한다면['100','3']으로 정렬된다.
- 하지만 '100'+'3' 보다는 '3'+'100'이 더 큰 숫자이다. ('1003'<'3100')
sort((a,b)=>(b+a)-(a+b)) : 'ba'와 'ab'의 연결을 계산한다.
- 결과가 음수이면 정렬된 배열에서 b가 a 앞에 와야 함을 의미한다.
- 결과가 양수이면 정렬된 배열에서 a가 b 앞에 와야 한다는 의미한다.
- 결과가 0인 경우 순서는 변경되지 않는다.
예시 )
a=1, b=2
(b + a) - (a + b) => (21)-(12) = 양수
b는 a 앞에 와야 한다.
a=1111, b=2222
(b + a) - (a + b) => (22221111)-(11112222) = 양수
b는 a 앞에 와야 한다.
a=1,b=1
(b + a) - (a + b) => (11)-(11) = 0 순서를 바꾸지 않는다.
'공부 > 코테준비' 카테고리의 다른 글
[Node.js_4기] 코드카타 : 멀리뛰기 (24/03/14) (0) | 2024.03.14 |
---|---|
[Node.js_4기] 코드카타 : 할인행사 (24/03/08) (0) | 2024.03.11 |
[Node.js_4기] 코드카타 : n개의 최소 공배수 (24/03/07) (0) | 2024.03.07 |
[Node.js_4기] 코드카타 : 피보나치 수열 (24/02/26) (0) | 2024.02.26 |
[Node.js_4기] 코드카타 : 이진 변환 반복하기 (24/02/22) (0) | 2024.02.22 |