문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 풀이
‘무슨 기준으로 정렬을 해야할까?’를 고민했다. 앞자리에 있는 수가 클수록 먼저 배치해야하는 것은 쉽게 알 수 있었다. 생각해봐야할 케이스는 34와 341 같은 경우이다. 둘 중에 무엇을 먼저 앞에 놓아야할까? 34134와 34341을 비교하면 34를 먼저 배치했을 때가 더 숫자가 컸다. 즉, 마지막 자리의 숫자가 더 큰 것이 먼저 배치가 되면 된다.
그래서 두 숫자를 비교할 때 각 숫자의 index를 설정하고, 맨 앞자리부터 숫자의 크기를 비교했다. 그리고 어떤 수의 index가 일의 자리까지 도착하면 그 수의 index는 더 이상 증가시키지 않았다.
시간 초과 코드
function sortNumbers(a, b) {
a = String(a);
b = String(b);
let a_index = 0;
let b_index = 0;
const a_length = a.length;
const b_length = b.length;
while(a_index < a_length) {
if(b_index >= b_length) {
break;
}
if(a[a_index] > b[b_index]) {
return 1;
}
else if(a[a_index] < b[b_index]) {
return -1;
}
else {
if(a_index < a_length - 1) {
a_index++;
}
if(b_index < b_length - 1) {
b_index++;
}
}
}
}
function solution(numbers) {
let answerArray = numbers.sort((a,b) => sortNumbers(a,b));
answerArray = answerArray.reverse();
let answer = '';
answerArray.forEach((e) => {
answer += e;
})
return answer;
}
제출을 해봤는데 시간이 초과되서 테스트를 통과하지 못했다. 숫자 두 개를 비교할 때마다 인덱스를 두고 하나씩 증가시키는 방식은 시간이 오래 걸리는 것 같다. 어떻게 하면 시간 초과를 방지할 수 있을까?
2. 코드
function sortNumbers(a, b) {
a = String(a);
b = String(b);
const first_a = a + b;
const first_b = b + a;
if (first_a > first_b) {
return 1;
}
else {
return -1;
}
}
function solution(numbers) {
let answerArray = numbers.sort((a,b) => sortNumbers(a,b));
answerArray = answerArray.reverse();
let answer = '';
answerArray.forEach((e) => {
answer += e;
})
if(Number(answer) === 0) {
return '0';
}
return answer;
}
생각해보니 그냥 두 수를 차례대로 붙여보고, 거꾸로 붙여봐서 둘 중에 무엇이 더 큰지 비교하면 되는거였다. 참고로 sort를 쓸 때는 1 아니면 -1을 return해야 제대로 작동이 된다. 그 사실을 잘 모르고 문자열을 return했더니 sort가 잘 동작하지 않았다.
그리고 테스트 케이스 하나가 끝끝내 통과되지 않아서 답답했는데, 찾아보니 [0, 0 ,0]인 케이스에서 자꾸 막혔던 것이었다. 내가 짠 코드에서는 ‘000’으로 출력되었어서 통과를 못했던 것이었고, answer를 숫자로 바꿀 때 0이면 문자 ‘0’을 출력되게 만들면 해당 테스트를 통과할 수 있었다.
'Programmers(JavaScript)' 카테고리의 다른 글
[프로그래머스 자바스크립트] ‘네트워크’ 풀어보기 (0) | 2025.01.27 |
---|---|
[프로그래머스 자바스크립트] ‘정수 삼각형’ 풀어보기 (0) | 2025.01.24 |
[프로그래머스 자바스크립트] ‘모의고사’ 풀어보기 (0) | 2025.01.11 |
[프로그래머스 자바스크립트] ‘올바른 괄호’ 풀어보기 (0) | 2025.01.07 |
[프로그래머스 자바스크립트] ‘입국심사’ 풀어보기 (0) | 2024.12.31 |