1. 같은 숫자는 싫어
문제 설명
배열 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]
문제풀이
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;
}
다른풀이
function solution(arr){
let answer = [];
for(let i=0; i<arr.length;i++){
if(arr[i] !== answer[answer.length-1])
answer.push(arr[i])
}
return answer;
}
function solution(arr){
const answer = arr.filter((el,i)=>{
console.log(el,i,arr[i+1]);
return el !== arr[i+1]
})
return answer;
}
접근방법
1. 0부터 정수의 숫자가 들어온다.
2. 정답은 배열타입이므로 정답을 담을 수 있는 배열을 만들어줌.
3. 콘솔에 arr를 찍어본다.
4. 맨 앞부터 데이터를 하나씩 가져온다.
5. arr[i+1] 현재 인덱스의 다음 인덱스값을 가져올 수 있다.
6. 현재가지고 있는 인덱스값의 데이터를 넣어준다.
7. 배열에서 마지막 데이터 가져오는 법 사용하기
const arr = ["z","x","c"];
arr[arr.length - 1];
arr.at(-1)
arr.slice(-1)
console.log(arr[-1]);
'c'
'c'
[ 'c' ]
undefined
at은 속도적인 이슈가 있음.
2. 자릿수 더하기
문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한 조건
N의 범위 : 100,000,000 이하의 자연수
입출력 예
N / answer
123 6
987 24
문제풀이
function solution(n){
n = String(n)
let answer = 0;
for(let i=0;i<n.length;i++){
console.log(i, n[i])
answer += Number(n[i])
}
console.log(answer);
}
접근방법
1.숫자타입은 인덱스값으로 접근이 불가능하다.
2. 숫자와 문자가 더해져서 "숫자문자"
3. 연산하기 위해서는 다시 숫자형타입으로 바꿔줘야 한다.
다른풀이
function solution(n){
const answer =String(n).split("").reduce((acc,cur)=>{
console.log(acc, cur, typeof acc);
return Number(acc) + Number(cur)
},0)
return answer;
}
접근방법
1. 메소드이용하기
2. 배열로 만들어줘야 한다.
3. split메소드로 문자열배열을 만들어주기
3. 약수의 합
문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한 조건
N의 범위 : 100,000,000 이하의 자연수
입출력 예
N / answer
123 6
987 24
문제풀이
function solution(n) {
const answer = n;
for(let i=1; i <= n / 2; i++){
if(n % i === 0){
answer += i;
}
}
return answer;
}
}
다른풀이
function solution(n) {
const answer = new Array(n)
.fill(1)
.reduce((acc, cur,i)=>{
const num = cur + i
console.log(acc, n,num)
if(n % num === 0){
console.log(n,num)
acc += num;
}
return acc;
},0)
return answer;
}
}
function solution(n) {
const answer = new Array(n)
.fill(1)
.reduce((acc, cur,i)=>{
const num = cur + i
return acc + (
n % num === 0 ? num : 0
)
},0)
return answer;
}
function solution(n) {
const answer = new Array(Math.floor(n / 2))
.fill(1)
.reduce((acc, cur,i)=>{
const num = cur + i
return acc + (
n % num === 0 ? num : 0
)
},n)
return answer;
}
접근방법
1. 반복문으로 n의 값을 하나씩 가져오기
2. 약수인지 구별하기 (약수는 a를 b로 나눴을 때 나눠떨어지면 b는 a의 약수
12를 3으로 나눌 때 떨어지니까 3은 12의 약수)
3. new Array()//인자에는 0을 포함한 자연수만 들어올 수 있음.