자바스크립트 기본 문제(1)

SUSU·2022년 2월 24일
0

프론트엔드 스쿨에서는 자바스크립트 기본문법강의 끝부분에 문법을 활용해서 풀 수 있는 문제들이 주어진다. 그 중 내가 해결하지 못해서 해답을 봐야했던 문제들을 리뷰하려고 한다.

1. 두 수 사이의 숫자 (swap)

두 숫자가 주어지고 그 사이의 숫자들을 출력하는 쉬운 문제이다. 하지만 여기서 내가 못했던 것은 두 숫자가 오름차순으로 정렬되있다면 쉬운데, 앞의 수가 뒤의 수보다 클 경우였다. 'swap'이라는 것을 통해 쉽게 순서를 바꿀 수 있다는데, 그 개념조차 생소했다.

해답에서는 변수를 이용하는 방법으로 두 매개변수를 swap했는데, swap을 하는 방법은 꽤 여러개가 있었다.

1. 변수를 이용하는 방법 (내용물이 섞이지 않게 컵 안에 내용물을 바꾸는 느낌으로 생각하면 된다.)

let a = '123'
let b = '456'

let temp;

temp = a;
a = b;
b = temp;

2. 덧셈/뺄셈을 이용하는 방법 (변수가 Number일 때만 가능)

let a = 123;
let b = 456;

a = a + b; // 123 + 456 = 579
b = a - b; // 579 - 456 = 123
a = a - b; // 579 - 123 = 456

3. 구조 분해 할당 (ES6에 추가된 문법)

let a = '123';
let b = 456;

[a, b] = [b, a];

익스플로러에서는 지원을 안한다. 코드가 짧은 만큼 많은 사람들이 추천하는 방법인데, 아직 이해가 잘 안간다. 그냥 외워야하는 걸까?

이외에도 두 가지 정도 방법이 더 있는데 그건 내가 진짜 모르겠어서 안 적는다. 이정도만 있어도 어느정도는 할 수 있을 거 같다.

2. 반평균 구하기 (소수점)

학생들의 점수를 배열로 받아서 평균을 구하는 문제인데, 매우 쉽지만 내가 넣은 이유는 소수점 두 번째 자리까지만 나와야한다는 조건때문이다. 이걸 기억못해서 바로 못풀었다.

function answer(score) {
  let average = 0;
  for (let i = 0; i < score.length; i++) {
    average += score[i];
  }
  average /= score.length;
  return average.toFixed(2);
}

기억하자 toFixed(소수점자리수 들어가는 곳)

3. 핸드폰 판매자 (최댓값)

매장의 판매자들이 핸드폰을 판매한 개수를 배열로 받아서 그 중 가장 많은 핸드폰을 판매한 사람의 순서를 출력해야하는 것이다. 여기서 나는 변수로 최댓값을 찾아내는 걸 생각하지 못했다.

function answer(employee) {
  let employee_id;
  let max = 0;
  for (let i = 0; i < employee.length; i++) {
    if (employee[i] > max) {
      max = employee[i];
      employee_id = i + 1;
    }
  }

  return employee_id;
}

나중에 Math.max()를 알고 다시 풀어봤다.

function answer(employee) {
  let employee_id = employee.indexOf(Math.max(...employee));

  return employee_id + 1;
}

이래서 함수를 많이 알아둬야하나보다..엄청 짧아진다. 물론 저 문제는 반복문을 연습하기 위한 용도였겠지만, O(N)에서 O(1)로 낮아지니 뭔가 기분이 좋다.

4. 무한 뺄셈 (swap + while)

두 개의 수를 배열로 받아서 앞의 수에서 뒤에 수를 뺀다. 또 뒤에 수에서 빼고난 값을 또 빼고, 반복하여 음수가 되기 전까지의 결과 값을 배열로 출력하는 문제였다. 이 문제도 swap관련된 문제였다. 앞의 문제와 다른 점은 while을 쓴다는 점이었다. 자꾸 반복문만 나오면 for을 쓰려는 습관이 있는데 조건 생각하다가 끝난다. while을 더 잘 쓸 수 있도록 연습해야겠다.

function answer(s, e) {
  let sequence = [];
  sequence.push(s);
  sequence.push(e);

  let sum;
  while (1) {
    sum = s - e;
    s = e;
    e = sum;

    if (e < 0) break;

    sequence.push(e);
  }
  return sequence;
}

while(1)은 조건이 항상 참이기 때문에 무한루프를 돌 수 있다. 그래서 break 조건을 넣어준 것이다. 또 풀면서도 변수를 swap할 때 실수했다. 저건 좀 연습을 해야할 것 같다.

profile
프론트엔드 개발을 이제 막 처음하는 신선한 개발자

0개의 댓글

관련 채용 정보