프로그래머스 Lv.1 숫자 짝꿍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function solution(X, Y) { let answer = ""; let x = X.split("").sort().reverse(); let y = Y.split("").sort().reverse(); for(let i = 0; i < x.length; i++) { for(let j = 0; j < y.length; j++) { if(x[i] === y[j]) { answer += y[j]; y.splice(j, 1); break; } } } if(answer.length === 0) return "-1"; else if(answer[0] === "0") return "0"; return answer; } | cs |
처음 작성하였던 실패한 코드이다.
정확히는 작동은 하지만 이중 for문을 사용해서 테스트케이스 11~15번이 시간 초과가 발생했다.
좀 찾아보니 splice의 사용도 한몫 한 것같다.
결국 다른 방법을 찾아야 했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function solution(X, Y) { let answer = ""; let x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; let y = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for(let i = 0; i < X.length; i++) { x[X[i]]++; } for(let i = 0; i < Y.length; i++) { y[Y[i]]++; } for(let i = 9; i >= 0; i--) { if(x[i] === 0 || y[i] === 0) { continue; } else { for(let j = 0; j < Math.min(x[i], y[i]); j++) { answer += i; } } } if(answer.length === 0) return "-1"; else if(answer[0] === "0") return "0"; return answer; } | cs |
먼저 인덱스 0부터 9까지 0으로 전부 가득 차있는
x
와y
라는 배열을 선언해준다.반복문을 2개 작성하고
i
를 0부터X, Y
의 길이만큼 반복한다.
X[i]
의 숫자를 배열x
의 인덱스라고 생각하고 1씩 증가 시켜준다.그러면 예를 들어서
X
가 "1234"이고Y
가 "1233"이면
x = [0, 1, 1, 1, 1, 0, 0, 0, 0, 0]
y = [0, 1, 1, 2, 0, 0, 0, 0, 0, 0]
가 된다.반복문을
i
가 9부터 0까지 감소하게 만들어준다.
만약x[i]
가 0이거나y[i]
가 0이라면continue
하고,
그렇지 않다면x[i]
와y[i]
중 최소값을 찾아서 그 숫자 만큼answer
에i
를 더해준다.만약
answer
의 길이가 0이면(빈 문자열이면)"-1"
을 return하고,
answer[0]
가 "0"으로 시작하면"0"
을 return 해준다.조건에 걸리는게 없다면
answer
을 return 해준다.