티스토리 뷰
💡 문제
🔍 분석 및 계획
✅ 문제 이해
조합(nCr)에 관한 문제이다
- 입력 값 : 수 배열
- 2 <= 배열의 길이 <= 100 - 출력 값 : 모든 경우의 합을 포함하는 배열
가장 단순한 방법은 이중 반복문을 통해서 중복되지 않게 변수를 저장한뒤 정렬하여 출력하는 것이다
✅ 의사코드 작성
// 합을 담을 객체 생성
// 이중 반복문을 사용해 객체에 두 수의 합 삽입 (key: 합 , value : 개수)
// if(i와 j가 다를 경우)
// 객체 값(키) +1
📝 코드 구현
의사코드 + 코드
function solution(numbers) {
// 합을 담을 객체 생성
let answer = {};
// 이중 반복문을 사용해 객체에 두 수의 합 삽입 (key: 합 , value : 개수)
for (let i = 0; i < numbers.length; i++) {
for (let j = 0; j < numbers.length; j++) {
// if(i와 j가 다를 경우)
if (i !== j)
// 객체 값(키) +1
answer[numbers[i] + numbers[j]] =
(answer[numbers[i] + numbers[j]] || 0) + 1;
}
}
return [...Object.keys(answer)].map(Number).sort((a, b) => a - b);
}
최종 코드
function solution(numbers) {
let answer = {};
for (let i = 0; i < numbers.length; i++) {
for (let j = 0; j < numbers.length; j++) {
if (i !== j)
answer[numbers[i] + numbers[j]] =
(answer[numbers[i] + numbers[j]] || 0) + 1;
}
}
return [...Object.keys(answer)].map(Number).sort((a, b) => a - b);
}
시간 복잡도 : O(n²) ----> n값에 제한이 없다면
💭 되돌아 보기
✅ 다른 사람 풀이
1.
Set을 이용한 중복 제거
function solution(numbers) {
const temp = []
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j])
}
}
const answer = [...new Set(temp)]
return answer.sort((a, b) => a - b)
}
'IT기초 > 프로그래머스 문제풀이' 카테고리의 다른 글
| [프로그래머스 LV.1] #31 크레인 인형뽑기 게임 (JavaScript) (0) | 2023.05.30 |
|---|---|
| [프로그래머스 LV.1] #30 키패드 누르기 (JavaScript) (0) | 2023.05.29 |
| [프로그래머스 LV.1] #28 3진법 뒤집기 (JavaScript) (0) | 2023.05.27 |
| [프로그래머스 LV.1] #27 내적 (JavaScript) (0) | 2023.05.26 |
| [프로그래머스 LV.1] #26 신규 아이디 추천 (JavaScript) (0) | 2023.05.25 |
댓글
