728x90
문제 및 제한사항
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
**제한사항**
numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.
풀이 방법
우선 배열을 전부 돌면서 만들 수 있는 모든 수를 찾으면서, 같은 인덱스가 아닌 경우만 answer에 push한다.그리고 오름차순으로 정렬한 뒤, 중복값을 제거해준다.
이렇게 하니까 for문을 3번 돌아서 시간 복잡도가 O(n^3)이 됐다.효율성을 높이기 위해 Set을 쓰거나 includes를 써서 풀어도 된다고 하는데 전자의 경우는 내가 아직 모른다...
function solution(numbers) {
const answer = new Set();
for (let i = 0; i < numbers.length - 1; i++) {
for (let j = i + 1; j < numbers.length; j++) {
answer.add(numbers[i] + numbers[j]);
}
}
return [...answer].sort((a, b) => a - b);
}
Set은 중복을 허용하지 않는 값의 집합이라고 한다. 그래서 마지막 for문처럼 중복 여부를 고려할 필요가 없어진다.서로 다른 인덱스에서 뽑기 위해 i와 j는 1씩 차이가 나게 수정되었다.
코드
function solution(numbers) {
let answer = [];
let answer2 = [];
for (let i = 0; i < numbers.length - 1; i++) {
for (let j = i + 1; j < numbers.length; j++) {
let ele = numbers[i] + numbers[j];
answer.push(ele);
}
}
answer.sort((a, b) => a - b);
for (let i = 0; i < answer.length; i++) {
if (answer[i] !== answer[i + 1]) {
answer2.push(answer[i]);
}
}
return answer2;
}
728x90
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 문자열 내 마음대로 정렬하기 (0) | 2023.05.08 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 크기가 작은 부분 문자열 (0) | 2023.04.20 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : K번째 수 (0) | 2023.04.19 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 숫자 문자열과 영단어 (0) | 2023.04.18 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 문자열 내 마음대로 정렬하기 (0) | 2023.04.18 |