-
#AIL_24.01.08 // Programmers_두 개 뽑아서 더하기AIL( Algorithm I Learned) 2024. 1. 8. 22:15
## AIL_ 두 개 뽑아서 더하기
*** 문제 설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
*** 제한사항
numbers의 길이는 2 이상 100 이하입니다.numbers의 모든 수는 0 이상 100 이하입니다.
*** 입출력 예
numbers rersult [2, 1, 3, 4, 1] [2, 3, 4 , 5, 6, 7] [5, 0, 2, 7] [2, 5, 7, 9, 12]
*** 입출력 예 설명
*입출력 예 #1
2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)3 = 2 + 1 입니다.4 = 1 + 3 입니다.5 = 1 + 4 = 2 + 3 입니다.6 = 2 + 4 입니다.7 = 3 + 4 입니다.따라서 [2,3,4,5,6,7] 을 return 해야 합니다.
*입출력 예 #2
2 = 0 + 2 입니다.5 = 5 + 0 입니다.7 = 0 + 7 = 5 + 2 입니다.9 = 2 + 7 입니다.12 = 5 + 7 입니다.따라서 [2,5,7,9,12] 를 return 해야 합니다.
## solution.JavaScript
1. 문제의 접근 방식
주어진 문제를 해결하기 위해서는 먼저 배열에서 두 개의 서로 다른 인덱스에 있는 수를 더하여 모든 가능한 합을 찾습니다. 이를 위해 이중 반복문을 사용하여 모든 조합을 확인합니다. 그 후, 중복된 합을 방지하기 위해 결과 배열에 중복된 수가 없도록 조치를 취합니다. 마지막으로, 최종 결과로 얻은 합을 오름차순으로 정렬하여 반환합니다.
2. 문제풀이
function solution(numbers) { var answer = []; // 두 개의 인덱스에 있는 수를 더해서 만들 수 있는 모든 수 찾기 for (let i = 0; i < numbers.length - 1; i++) { for (let j = i + 1; j < numbers.length; j++) { const sum = numbers[i] + numbers[j]; // 중복된 합을 방지하기 위해 answer 배열에 없는 경우에만 추가 if (!answer.includes(sum)) { answer.push(sum); } } } // 오름차순으로 정렬 answer.sort((a, b) => a - b); return answer; } /* 테스트 1 입력값 〉 [2, 1, 3, 4, 1] 기댓값 〉 [2, 3, 4, 5, 6, 7] 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 [5, 0, 2, 7] 기댓값 〉 [2, 5, 7, 9, 12] 실행 결과 〉 테스트를 통과하였습니다. */
1) function solution(numbers): 배열 numbers를 받아서 문제를 해결하는 함수를 선언합니다.
2) var answer = []: 결과를 담을 빈 배열 answer를 선언합니다.
3) for (let i = 0; i < numbers.length - 1; i++): 배열의 첫 번째 수부터 뒤에서 두 번째 수까지 반복합니다.
4) for (let j = i + 1; j < numbers.length; j++): i번째 수 다음부터 배열의 끝까지 반복합니다.
5) const sum = numbers[i] + numbers[j];: 현재 두 수의 합을 계산하여 sum에 저장합니다.
6) if (!answer.includes(sum)): 만약 answer 배열에 현재 합이 포함되어 있지 않다면 아래를 실행합니다.
7) answer.push(sum);: 현재 합을 answer 배열에 추가합니다.
8) answer.sort((a, b) => a - b);: 최종적으로 모든 합을 구한 후에는 answer 배열을 오름차순으로 정렬합니다.
9) return answer;: 정렬된 결과를 반환합니다.
3. 다른사람의 문제풀이 및 접근방식 분석
function solution(numbers) { const temp = [] // 두 수의 합을 모두 구해서 temp 배열에 저장 for (let i = 0; i < numbers.length; i++) { for (let j = i + 1; j < numbers.length; j++) { temp.push(numbers[i] + numbers[j]) } } // 중복된 합을 제거하기 위해 Set을 이용한 배열 생성 const answer = [...new Set(temp)] // 정렬하여 반환 return answer.sort((a, b) => a - b) } /* 테스트 1 입력값 〉 [2, 1, 3, 4, 1] 기댓값 〉 [2, 3, 4, 5, 6, 7] 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 [5, 0, 2, 7] 기댓값 〉 [2, 5, 7, 9, 12] 실행 결과 〉 테스트를 통과하였습니다. */
1) 두 수의 합 계산
temp 배열에 두 수의 합을 모두 구해서 저장합니다. 이를 위해 중첩된 for 루프를 사용하며, 서로 다른 인덱스에 있는 수를 더하여 모든 가능한 합을 찾습니다.
2) 중복 제거
중복된 합을 방지하기 위해 Set 객체를 이용하여 temp 배열을 중복 제거한 후, 다시 배열로 변환합니다. Set은 중복을 허용하지 않는 특성을 가지고 있기 때문에 중복된 합이 없도록 합니다.
3) 정렬
최종 결과로 얻은 배열을 sort 메서드를 이용하여 오름차순으로 정렬합니다.
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_24.01.11 // Programmers_문자열 내 마음대로 정렬하기 (2) 2024.01.11 #AIL_24.01.09 // Programmers_가장 가까운 같은 글자 (1) 2024.01.09 #AIL_24.01.04 // Programmers_같은 숫자는 싫어 (0) 2024.01.04 #AIL_24.01.03 // Programmers_크기가 작은 부분 문자열 (0) 2024.01.03 #AIL_23.12.30 // Programmers_삼총사 (0) 2023.12.30