문제설명
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
내가 푼 문제 풀이
이번 문제는 어떻게 진행이 되는 지 먼저 구상을 해보고 코드를 짰다.
function solution(numbers) {
var answer = [];
for(let i = 0; i<numbers.length; i++){
// 예를 들어서 구구단에서 단 역할을 하는 곳
for(let j = i+1; j<numbers.length; j++){
// 예를 들어서 구구단에서 1~9까지 수
// i+1을 한 이유는 서로 다른 인덱스에 있는 두개의 수를 뽑아야 하기 때문에 i의 다음 값을 뽑기 위해서 사용
// <=을 사용하지 않은 이유는 배열에 index는 0부터 시작하기 때문에
// <=를 하면 마지막 연산을 할 때 NaN이 나온다.
if(!answer.includes(numbers[i] + numbers[j])){
// includes()를 사용해서 연산한 값이 answer 배열에 있는 지 없는 지 boolean 결과값으로 받는다.
answer.push(numbers[i] + numbers[j])
// 배열 안에 없다면 push()를 사용해서 연산한 값을 넣는다.
}
}
}
return answer.sort((a,b) => a-b);
// 문제에서 배열을 오름차순으로 담아 return 하라고 했기 때문에 sort()를 사용한다.
// (a, b)=>a-b를 한 이유는 배열에서 sort()를 사용하면 오름차순에 오류가 나는 경우가 있어서 a-b를 사용해서 0 보다 작으면 a를 배열에 앞에 놓고 0 보다 크면 b를 배열에 앞에 두도록 한 것이다.
}
https://hianna.tistory.com/403
주석을 뺸 코드 ->
function solution(numbers) {
var answer = [];
for(let i = 0; i<numbers.length; i++){
for(let j = i+1; j<numbers.length; j++){
if(!answer.includes(numbers[i] + numbers[j])){
answer.push(numbers[i] + numbers[j])
}
}
}
return answer.sort((a,b) => a-b);
}
다른 사람이 푼 문제 풀이
function solution(numbers) {
var answer = [];
for ( let i = 0; i < numbers.length; i++) {
for ( let j = i + 1; j < numbers.length; j++) {
let sum = numbers[i] + numbers[j];
if( answer.indexOf(sum) === -1) {
answer.push(sum);
}
}
}
answer.sort(function(a,b) {
return a - b;
})
return answer;
}
이 분은 indexOf()를 사용해서 배열 안에 연산한 값이 없으면 -1을 반환하기 때문에 -1이 반환된 경우 배열에 연산 값을 push 하도록 코드를 짜셨다. 이 방법도 좋은 것 같다.
'항해 중 > 2주차 알고리즘(프로그래머스)' 카테고리의 다른 글
4일차 → 문자열 내림차순으로 배치하기(split(), sort(), reverse(), join()) (0) | 2021.11.11 |
---|---|
4일차 → 로또의 최고 순위와 최저 순위(includes(), filter()) (0) | 2021.11.11 |
4일차 → 같은 숫자는 싫어(filter()) (0) | 2021.11.11 |
4일차 → 3진법 뒤집기(toString(), split(), reverse(), join(), parseInt()) (0) | 2021.11.11 |
4일차 → 콜라츠 추측(while 반복문) (0) | 2021.11.11 |
댓글