프로그래머스 | 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개의 댓글

관련 채용 정보