난이도: Lv. 2
정답률: 53%
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42746
알고리즘
(예외 상황) 주어진 배열의 모든 수가 0이면 나올 수 있는 가장 큰 수도 0이기 때문에 0을 리턴해준다.
1. 주어진 배열의 모든 원소를 문자형으로 변환한다.
2. 병합할 순서대로 정렬한다. 문자열 a, b가 있을 때 a + b와 b + a 중 더 큰 것이 앞에 오도록 조건을 설정한다.
3. 2의 과정을 통해 정렬된 배열의 모든 원소를 하나의 문자열로 잇고 결과를 리턴한다.
코드
function solution(numbers) {
if (!numbers.find(e => e !== 0)) { return '0'; }
let answer = '';
const numbersStr = numbers.map(e => e.toString());
numbersStr.sort((a, b) => a + b < b + a ? 1 : -1);
for (let str of numbersStr) { answer += str; }
return answer;
}
주저리
첫 번째 고난
3, 30, 34가 있을 때 가장 높은 우선순위는 34, 두 번째는 3, 세 번째는 30이라고 생각하고 sort 함수 안에 조건을 힘들게 달았다. a, b의 첫 숫자가 같을 때 a의 두 번째 숫자가 a의 첫 숫자보다 크면 가장 높은 우선순위 어쩌고 하면서 조건을 막 세우다 보니까 이건 좀 아닌 것 같은데 라는 생각이 들어서 한참 고민하다가 그냥 a랑 b 더해보고 더 큰 것을 기준으로 정렬하면 된다는 것을 깨달았다.
두 번째 고난
암만 생각해도 맞는데 테케 11번만 계속 틀렸다는 것이다. 하나만 틀린 걸 보니 특정 경우에 대한 예외를 생각 안한 것인데 0이나 1000에 대한 문제일 거라고는 생각했는데 아무리 해봐도 모르겠어서 질문하기 봤더니 반례로 [0, 0, 0]이 있었다. 내 코드는 "000"을 리턴하고 있어서 틀린 것이었다~
근데 이게 정답률이 왜 낮지 라는 생각이 드는 문제다.
'코딩테스트' 카테고리의 다른 글
[JS] 소수 찾기 (0) | 2024.03.13 |
---|---|
[JS] 다리를 지나는 트럭 (0) | 2024.02.29 |
[JS] 키패드 누르기 (0) | 2024.02.02 |
[JS] 쿼드압축 후 개수 세기 (0) | 2024.02.01 |
[JS] 2개 이하로 다른 비트 (1) | 2024.01.30 |