23/11/9

Laejun Kim·2023년 11월 9일
1

TIL

목록 보기
32/89
post-thumbnail

연습문제 풀이

자릿수 더하기

출처) https://school.programmers.co.kr/learn/courses/30/lessons/12931

  • 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
    예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

<내 풀이>

function solution(n) {
  let answer = n
    .toString()
    .split("")
    .map((item) => Number(item))
    .reduce((acc, cur) => acc + cur);

  return answer;
}

<배운점>

  • 메서드 체이닝을 유용하게 사용할 수 있다.

  • reduce 메서드로 배열내 숫자들의 합을 간단하게 구할 수 있다.

  • split 메서드의 인자에 ("")를 넣은것과 (" ") 를 넣은것은 결과가 다르게 나온다. 전자는 모든 글자를 하나하나 쪼개주고, 후자는 빈칸을 기준으로 쪼개준다. 빈칸을 생각없이 넣으면 안된다.

  • 의문) string-> number 변환을 위해 나는 Number() 를 사용했는데 다른 사람들 풀이에서는 대부분 parseInt()를 사용했다.

<parseInt() vs Number()>

  • parseInt()는 정수만 뽑아서 숫자로 변환해주고, Number()는 소수점까지 숫자로 변환해준다.
let mynum = "12.34";
console.log(parseInt(mynum)); // 12
console.log(Number(mynum));  // 12.34
console.log(Math.floor(Number(mynum))); // 12

소수점을 버려야 하는 상황에서 parseInt를 사용하는 것은 잘못된 사용이 될 것이고 역으로 소수점을 버리고 정수만 필요한 상황에서 Number를 사용하면 Math.floor를 한번 더 거쳐야 하므로 비효율적일 것이다. 위 문제에서는 정수만 등장하기에 parseInt()를 사용하는 것과 Number()를 사용하는 것에 유의미한 차이는 없었다.

하지만 소수점이 언제 등장할지 모르므로 둘의 차이를 정확히 이해하고 적재적소에 사용하는 것이 중요하다.

각도기

출처)https://school.programmers.co.kr/learn/courses/30/lessons/120829

  • 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

<내 풀이>-오답

function solution(angle) {
    if(0<angle<90) {return 1};
     if(angle===90){return 2};
     if(90<angle<180){return 3};
    if(angle===180){return 4};
}

어이없는 실수. 논리 연산자를 저런식으로 사용할 수는 없다.
angle이 0초과, 90미만인 경우를 나타내고 싶으면
0<angle && angle<90 으로 표기해야 한다.

<내 풀이>-수정후

function solution(angle) {
    if(0<angle && angle<90) {return 1};
     if(angle===90){return 2};
     if(90<angle && angle<180){return 3};
    if(angle===180){return 4};
}

의도대로 정상 작동하는 코드.

<배운점>

  • 논리연산자를 수학에서 하는 것처럼 붙여서 사용할 수 없다.
    &&나 ||로 결합해 주어야 한다.

짝수의 합

출처) https://school.programmers.co.kr/learn/courses/30/lessons/120831

  • 정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

<내 풀이>

function solution(n) {
    let sum=0;
    for(let i=0; i<=n; i++){
        if(i%2===0){sum+=i}
    }
    return sum;
}

<다른 사람 풀이>

function solution(n) {
    var answer = 0;

    for(let i=2 ; i<=n ; i+=2)
        answer += i;

    return answer;
}

<배운점>

  • for 문 안에서 i값을 변화시킬때 i++로 1씩 증가시키는 것은 많이 봐왔지만 i+=2로 2씩 증가시키는 것은 생소하면서도 유용하다. 문제에서 짝수만 더하라고 했으므로 i를 2부터 시작해서 2씩 증가시키는것도 분명 유효한 접근일 것이다.

0개의 댓글