난이도 : Level. 1
언어 : Javascript
출제 내역 : 연습문제
약수의 합
- 주어진 수의 약수들의 합을 구하라
function solution(n) {
var answer = 0;
for (let i = 1; i<=n; i++) {
if (n%i === 0) {
answer += i
}
}
return answer;
}
i
로 나누어 떨어지는 값만 더해 결과를 냈습니다.
시저 암호
- 알파벳 문자열을 일정 간격씩 밀면서 새로운 문자열을 생성하기
function solution(s, n) {
var answer = '';
const lowAl = 'abcdefghijklmnopqrstuvwxyz'.split('');
const upAl = 'abcdefghijklmnopqrstuvwxyz'.toUpperCase().split('');
let newArr = s.split('');
for (let i = 0; i<newArr.length; i++) {
if (newArr[i] === ' ') {
answer += ' ';
} else {
if (lowAl.indexOf(newArr[i]) >= 0) {
let lowNum = lowAl.indexOf(newArr[i]) + n;
lowNum > 25 ? answer += lowAl[lowNum - 26] : answer += lowAl[lowNum]
} else if (upAl.indexOf(newArr[i]) >= 0) {
let upNum = upAl.indexOf(newArr[i]) + n;
upNum > 25 ? answer += upAl[upNum - 26] : answer += upAl[upNum]
}
}
}
return answer;
}
들어온 문자열을 배열로 나눠주고,
하나씩 비교하는데, 맨 마지막 글짜까지 갔을 때, 다시 앞으로 가야하기 때문에
26을 빼줘서 다시 앞으로 갈 수 있도록 해줬습니다.
문자열을 정수로 바꾸기
- 문자열을 부호에 유의해 정수로 바꾸기
function solution(s) {
var answer = 0;
let newArr = s.split('')
let newStr = ''
if (newArr[0] === '-') {
newArr.splice(0,1);
newStr = newArr.join('');
answer = Number(newStr)*-1
} else {
newStr = newArr.join('');
answer = Number(newStr)
}
return answer;
}
부호를 판단하기 위해 배열로 변경한 문자열의 가장 앞을 확인하고,
부호일시 부호에 맞게 부호를 곱해주어 답을 반환합니다.
수박수박수박수박수박수?
- 기준이 되는 숫자가 짝수인지 홀수인지에 따라 반복하는 문자열을 반환하기
function solution(n) {
var answer = '';
if (n%2 === 0) {
answer = '수박'.repeat(n/2)
} else {
answer = '수박'.repeat((n-1)/2) + '수'
}
return answer;
}
들어온 숫자가 짝수면 n을 2로 나눈만큼 '수박'을 반복하고,
홀수면 n에서 1을 빼고 2로 나눈만큼 반복하고 마지막에 '수'를 더해줍니다.
소수 찾기
- 입력된 숫자부터 1까지의 사이 중 소수가 몇개인지 반환
function solution(n) {
var answer = 0;
let deArr = [2];
for (let i = 3; i<n+1; i++) {
let check = true;
for (let l = 0; l<deArr.length; l++) {
if (i%deArr[l] === 0) {
check = false
break;
}
}
if (check === true) {
deArr.push(i)
}
}
return answer = deArr.length;
}
해당 풀이 방법처럼 풀었을 때, 정답은 도출 할 수 있었지만
효율성 측면에서는 좋지 않은 결과를 보여 코드 수정이 필요했습니다.
function solution(n) {
var answer = 0;
let nums = []
for (let i = 2; i<=n; i++) {
nums[i] = i
}
for (let i = 2; i<=n; i++) {
if (nums[i] === 0) continue;
for (let l = i*2; l<=n; l += i) {
nums[l] = 0
}
}
for (let i = 2; i <= n; i++) {
if (nums[i] !== 0) answer += 1;
}
return answer;
}
소수의 배수는 소수가 아니기에 해당 부분을 모두 0으로 하는
하나의 배열을 만들어서 나중에는 0이 아닌 부분만 체크해 결과를 내는 방식으로 해결했습니다