1. 조건
우선 X, Y의 길이는 각각 최대 3,000,000이 될 수 있다.
그러므로 아무생각없이 뇌를 비우고 X, Y를 가지고 정렬하고 filter 몇 번씩 돌리면서 구현했다가는
'시간 초과'에 뚜들겨 맞을 가능성이 크다. 내가 그랬다.
2. 풀이과정
앞서 말했듯이 나는 생각없이 조건을 제대로 읽지않고 구현하다 '시간 초과'와 마주하게되었다.
실제로 해당 문제에서 X, Y에 각각 split(" ")과 내림차순 정렬만 작성하고 채점버튼을 누르면 다음과 같은 시간이 나온다.
그러므로 나는 먼저 split을 활용하여 X, Y를 각각 배열로 만들고
고차 함수 filter와 for문을 통해 0부터 9까지 X, Y의 공통되는 숫자를 배열 answer에 순서대로 담았다.
그리고 answer를 내림차순 정렬 및 join 함수를 사용하여 return 해주었다.
3. 내 코드
function solution(X, Y) {
const answer = [];
X = X.split("");
Y = Y.split("");
const addNumberToAnswer = (storage) => {
storage.map((number) => answer.push(number));
};
for (let i = 0; i < 10; i += 1) {
const storageX = X.filter((number) => number === `${i}`);
const storageY = Y.filter((number) => number === `${i}`);
storageX.length < storageY.length
? addNumberToAnswer(storageX)
: addNumberToAnswer(storageY);
}
answer.sort((a, b) => {
return b - a;
});
if (answer.length === 0) return "-1";
if (answer[0] === "0") return "0";
return answer.join("");
}
solution("100", "2345");
solution("100", "203045");
solution("100", "123450");
solution("12321", "42531");
solution("5525", "1255");
4. 마지막
끝부분에 answer을 정렬해주었는데
그냥 처음부터 for문에서 내림차순으로 answer에 넣었다면 시간을 더 절약할 수 있었을것 같다.
'개발이야기 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 햄버거 만들기 (0) | 2023.02.02 |
---|---|
[알고리즘] 프로그래머스 옹알이(2) (0) | 2023.02.01 |
[알고리즘] 프로그래머스 숫자 문자열과 영단어 (0) | 2023.01.31 |
[알고리즘] 프로그래머스 콜라 문제 (0) | 2023.01.30 |
[알고리즘] 프로그래머스 삼총사 (0) | 2023.01.29 |