프론트엔드 스쿨에서는 자바스크립트 기본문법강의 끝부분에 문법을 활용해서 풀 수 있는 문제들이 주어진다. 그 중 내가 해결하지 못해서 해답을 봐야했던 문제들을 리뷰하려고 한다.
두 숫자가 주어지고 그 사이의 숫자들을 출력하는 쉬운 문제이다. 하지만 여기서 내가 못했던 것은 두 숫자가 오름차순으로 정렬되있다면 쉬운데, 앞의 수가 뒤의 수보다 클 경우였다. 'swap'이라는 것을 통해 쉽게 순서를 바꿀 수 있다는데, 그 개념조차 생소했다.
해답에서는 변수를 이용하는 방법으로 두 매개변수를 swap했는데, swap을 하는 방법은 꽤 여러개가 있었다.
let a = '123'
let b = '456'
let temp;
temp = a;
a = b;
b = temp;
let a = 123;
let b = 456;
a = a + b; // 123 + 456 = 579
b = a - b; // 579 - 456 = 123
a = a - b; // 579 - 123 = 456
let a = '123';
let b = 456;
[a, b] = [b, a];
익스플로러에서는 지원을 안한다. 코드가 짧은 만큼 많은 사람들이 추천하는 방법인데, 아직 이해가 잘 안간다. 그냥 외워야하는 걸까?
이외에도 두 가지 정도 방법이 더 있는데 그건 내가 진짜 모르겠어서 안 적는다. 이정도만 있어도 어느정도는 할 수 있을 거 같다.
학생들의 점수를 배열로 받아서 평균을 구하는 문제인데, 매우 쉽지만 내가 넣은 이유는 소수점 두 번째 자리까지만 나와야한다는 조건때문이다. 이걸 기억못해서 바로 못풀었다.
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
(소수점자리수 들어가는 곳)
매장의 판매자들이 핸드폰을 판매한 개수를 배열로 받아서 그 중 가장 많은 핸드폰을 판매한 사람의 순서를 출력해야하는 것이다. 여기서 나는 변수로 최댓값을 찾아내는 걸 생각하지 못했다.
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)
로 낮아지니 뭔가 기분이 좋다.
두 개의 수를 배열로 받아서 앞의 수에서 뒤에 수를 뺀다. 또 뒤에 수에서 빼고난 값을 또 빼고, 반복하여 음수가 되기 전까지의 결과 값을 배열로 출력하는 문제였다. 이 문제도 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할 때 실수했다. 저건 좀 연습을 해야할 것 같다.