본문 바로가기

항해99

[항해99]TIL_알고리즘4

반응형

문제1 : 정수 제곱근 판별


 

1.1 풀이(오답)

- 제곱근을 구하는 Math.sqrt()를 이용 num을 초기화

- 양의 제곱근 중 가장 작은 정수가 2라는 점을 이용,

- num이 2와 같거나 크다면 Math.pow를 이용 num+1에서 제곱하였으나 아래와 같은 오답이 존재
 1) num으로 정수가 아닌 값이 출력되는 경우 (ex : 3.123412412...)

 2) solution(1)을 실행하는 경우

function solution(n) {
    let num = Math.sqrt(n);
    return num/1 >= 2 ? Math.pow(num+1, 2) : -1; 
}

 

1.2 풀이(수정)

- num을 1로 나눈 나머지가 0인지 확인하여 정수 여부를 체크

function solution(n) {
    let num = Math.sqrt(n);

    return num % 1 === 0 ? Math.pow(num+1, 2) : -1; 
}

 

1.3 다른풀이

- isInteger()를 통해 정수인지 확인하는 방법

function solution(n) {
    var result = 0;
    var n = Math.sqrt(n);
    result = Number.isInteger(n) ? Math.pow(n+1, 2) : 'no';
    return result;
}

문제2 : 자릿수 더하기


2.1 풀이

 - 반복문을 사용하여 각 자릿수를 answer에 더한다.

 - 반복할 길이를 측정하기 위해 String(n)으로 문자화시켜 str에 담는다

 - 반복문을 돌면서 answer에 parseInt(str[i])의 값을 더한다.

 - parseInt는 str을 다시 숫자로 바꿔 연산하기 위함

 

function solution(n){
    let answer = 0;
    let str = String(n);
    for(let i=0; i<str.length; i++){
        answer += parseInt(str[i]);
    }
    return answer;
}

2.2 다른 풀이

 - 마찬가지로 n을 문자화 시킨 뒤 ("")을 기준으로 나눈다.

 - reduce()메서드를 사용하여 누산한다.

function solution(n){
    return String(n).split("").reduce((a, b) => a + parseInt(b), 0)
}

문제3 : 제일 작은 수 제거하기


 

3.1 풀이(오답)
- 먼저 reverse()로 배열을 역순 정렬한다 

- 반복문을 이용, (배열의 길이-1)에서 역순으로 1까지 돌려서 마지막 숫자를 제거한다.

- 테스트 케이스는 통과했지만, 제출해보니 틀린 코드였다.

- 무엇이 틀렸을까..?

function solution(arr) {
    let result = [];
    let answer = arr.reverse();
    for(let i=answer.length-1; i>=1; i--){
        result.push(answer[i]);
    }
    return result.length >= 1 ? result : [-1]; 
    
}

3.2

반응형

'항해99' 카테고리의 다른 글

[항해99]WIL(2주차)_ECMAScript, ES5~ES6  (1) 2021.11.14
[항해99]TIL_알고리즘5  (2) 2021.11.12
[항해99]TIL_알고리즘3  (0) 2021.11.10
[항해99]TIL_알고리즘2  (0) 2021.11.09
[항해99]TIL_알고리즘1  (0) 2021.11.08