2개의 코드 문제, 2개의 면접대비 문제
문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 조건
n은 0 이상 3000이하인 정수입니다.
입출력 예
n return
12 28
5 6
입출력 예 설명
입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.
code
function solution(n) {
let result = 0;
for (let i = 1; i <= n; i++) {
if (n % i === 0) {
result += i;
}
}
return result;
}
description
약수의 합을 구하는 것이므로, 1부터 해당 수를 나누었을때 나누어 떨어지는 수들을 더하면 된다. 따라서 n을 i로 돌아가며 나누었을때, 나머지가 0이면 result에 i가 더해지도록 만들었다.
문제 설명
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
제한 조건
배열 arr의 크기 : 1,000,000 이하의 자연수
배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
입출력 예
arr answer
[1,1,3,3,0,1,1][1,3,0,1]
[4,4,4,3,3][4,3]
입출력 예 설명
입출력 예 #1,2
문제의 예시와 같습니다.
code
function solution(arr) {
let answer = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i + 1]) {
answer.push(arr[i]);
}
}
return answer;
}
description
arr에 있는 수중 연속되는 수는 하나만 남기고, 연속되지 않은 수는 그대로 추가하는 문제이다. 처음에는 배열안의 수를 돌려 뒤에있는 수와 같을때 빈배열을 넣어주었지만, 그렇게 되면 반복되지 않은 수는 포함이 되지 않는다. 반대로 뒤에 있는 수와 다를때에, 앞의 수를 빈배열에 넣어주면 반복되는 수가 자동으로 걸러지게 되므로 arr[i]!==arr[i+1]을 사용해 주었다.
[Personal Question]
Answer.
접하지 않았던 언어와 프레임워크를 공부할때에는 공식문서를 보는 것이 가장 좋은 방법이라고 생각합니다. 해당 언어와 프레임워크를 개발한 사람들이 만들어놓은 것이기 때문에 가장 정확하고, 올바른 사용법이 적혀있다고 생각하기 때문에 공식문서를 가장 먼저 살펴보는 편입니다. 공식문서가 디테일하지 않은 경우에는 블로그를 많이 찾아보는 편입니다. 코드를 위주로 보면서 공부하는 편이고, 막히는 경우에는 stackoverflow를 많이 사용합니다.