프로그래머스 | Lv.1_연습문제_Part.4_JS

김명성·2021년 10월 20일
0

Algorithm

목록 보기
38/61
post-thumbnail

난이도 : Level. 1
언어 : Javascript
출제 내역 : 연습문제

전체 풀이 코드 👈🏻 클릭시 Github로 이동

❓ Question 1

약수의 합

  • 주어진 수의 약수들의 합을 구하라

📝 My Solution 1

function solution(n) {
    var answer = 0;
        for (let i = 1; i<=n; i++) {
            if (n%i === 0) {
                answer += i
            }
        }
    return answer;
}

i로 나누어 떨어지는 값만 더해 결과를 냈습니다.

결과


❓ Question 2

시저 암호

  • 알파벳 문자열을 일정 간격씩 밀면서 새로운 문자열을 생성하기

📝 My Solution 2

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을 빼줘서 다시 앞으로 갈 수 있도록 해줬습니다.

결과


❓ Question 3

문자열을 정수로 바꾸기

  • 문자열을 부호에 유의해 정수로 바꾸기

📝 My Solution 3

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;
}

부호를 판단하기 위해 배열로 변경한 문자열의 가장 앞을 확인하고,
부호일시 부호에 맞게 부호를 곱해주어 답을 반환합니다.

결과


❓ Question 4

수박수박수박수박수박수?

  • 기준이 되는 숫자가 짝수인지 홀수인지에 따라 반복하는 문자열을 반환하기

📝 My Solution 4

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로 나눈만큼 반복하고 마지막에 '수'를 더해줍니다.

결과


❓ Question 5

소수 찾기

  • 입력된 숫자부터 1까지의 사이 중 소수가 몇개인지 반환

📝 My Solution 5

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이 아닌 부분만 체크해 결과를 내는 방식으로 해결했습니다

결과

profile
잠재력은 핵폭탄급 Frontend Developer

0개의 댓글