function solution(X, Y) {
let result = [];
let x = X.split('').sort((a,b) => b-a)
let y = Y.split('').sort((a,b) => b-a)
for (let i=0; i<x.length; i++) { //y가 x에 있으면
let idx = y.indexOf(x[i])
if (idx !== -1) {
result.push(x[i])
y.splice(idx, 1)
}
}
if (result.length === 0) { //짝꿍이 없을 때
return '-1'
}
return result.every((n) => n == 0) ? '0' : result.join('') //짝궁이 0만 있을 때
}
예시 다섯개는 다 통과했는데, 실행 시간이 너무 길어져서 통과를 못했다.
반복문을 비효율적으로 쓴 것 같다.
function solution(X, Y) {
let result = [];
let xCount = [];
let yCount = [];
for (let i=0; i<=9; i++) { // 9개의 배열 만들어줌
xCount.push(0)
yCount.push(0)
}
let xArr = X.split('')
let yArr = Y.split('')
//인덱스에 해당하는 수 count
for (let k=0; k<xArr.length; k++) {
xCount[xArr[k]]++;
}
for (let l=0; l<yArr.length; l++) {
yCount[yArr[l]]++;
}
//둘 중 작은 수만 남기기
let count = xCount.map((n, idx) => Math.min(n, yCount[idx]))
//숫자 반환
for (let j=9; j>=0; j--) {
if (count[j] > 0) {
result.push(j.toString().repeat(count[j]))
}
}
if (result.length === 0) {
return '-1'
}
if (result.every((n) => n == 0)) {
return '0'
}
return result.join('')
}
애초에 9개의 0을 가진 배열을 만들어준 후, 숫자가 그 배열을 돌 때마다 그 인덱스를 counting 하도록 바꿔줬다.
그렇게 주어진 X, Y 문자열을 전부 순회하는 과정을 하나로 줄여줬다.
** 중간에 한번 오류가 나서 왜그런지 살펴봤는데, X를 배열로 변경하지 않고 forEach를 사용했다.
항상 어떤 타입인지 기억하고 확인하기로..
'코딩 테스트 > test_javaScript' 카테고리의 다른 글
[코딩테스트/javaScript] 문자열 내 마음대로 정렬하기 (0) | 2025.01.26 |
---|---|
[코딩테스트/javaScript] 옹알이 (2) (1) | 2025.01.20 |
[코딩테스트/javaScript] 로또의 최고 순위와 최저 순위 (1) | 2025.01.19 |
[코딩테스트/javaScript] 기사단원의 무기 (1) | 2025.01.18 |
[코딩테스트/javaScript] 덧칠하기 (1) | 2025.01.17 |