📺 결과물

image

⬇️ 설치할 것

🖍️ 윈도우 터미널 커스터마이징

🐧 WSL과 리눅스 콘솔 이해하기

윈도우에서 WSL로 리눅스를 다룰 때 주의할 것

WSL 리눅스로 언어 설치하기

apt-get으로 설치하기

nodejs 설치하기

PPA와 WSL의 Python

deadsnakes로 python 설치하기

WSL과 윈도우의 환경의 차이

WSL과 Git, Github CLI


# Level 0. 직사각형 넓이 구하기

직사각형 넓이 구하기

문제 설명

2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function solution(dots) {
  let width = 0;
  let height = 0;

  for (let i = 1; i < 4; i++) {
    if (dots[i][0] === dots[0][0]) {
      height = Math.abs(dots[i][1] - dots[0][1]);
      continue;
    }

    if (dots[i][1] === dots[0][1]) {
      width = Math.abs(dots[i][0] - dots[0][0]);
    }
  }

  return width * height;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function solution(dots) {
  let width = 0;
  let height = 0;

  for (let i = 1; i < 4; i++) {
    if (dots[i][0] === dots[0][0]) {
      height = Math.abs(dots[i][1] - dots[0][1]);
      continue;
    }

    if (dots[i][1] === dots[0][1]) {
      width = Math.abs(dots[i][0] - dots[0][0]);
    }
  }

  return width * height;
}

리팩토링

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(dots) {
  const [benchmarkX, benchmarkY] = dots[0];
  let width = 0;
  let height = 0;

  dots.forEach(([x, y], index) => {
    if (index === 0) return;
    if (!height && x === benchmarkX) height = Math.abs(benchmarkY - y);
    if (!width && y === benchmarkY) width = Math.abs(benchmarkX - x);
  });

  return width * height;
}

# Level 0. 다항식 더하기

다항식 더하기

문제 설명

한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function solution(polynomial) {
  const answer = [0, 0];
  const splitted = polynomial.split(" + ");

  if (splitted.length === 1) return polynomial;

  splitted.forEach((term) => {
    if (term[term.length - 1] !== "x") {
      answer[1] += term * 1;
      return;
    }

    answer[0] += term === "x" ? 1 : term.slice(0, term.length - 1) * 1;
  });

  if (answer[0] === 1) answer[0] = "";
  answer[0] += "x";
  if (answer[0] === "0x") answer.shift();
  if (answer[1] === 0) answer.pop();

  return answer.join(" + ");
}

리팩토링

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const filterPolynomial = (polynomialStr) => {
  const validTerm = new RegExp("[0-9]*x|[0-9]+", "g");
  return polynomialStr.match(validTerm);
};

const getPolynomialResult = (polynomialArr) => {
  const result = [0, 0];
  polynomialArr.forEach((term) => {
    if (term[term.length - 1] !== "x") {
      result[1] += parseInt(term);
      return;
    }

    result[0] += term === "x" ? 1 : parseInt(term);
  });

  return result;
};

const formatPolynomial = (xNumber, constant) => {
  if (!xNumber) return [constant];

  const result = [];
  xNumber === 1 ? result.push("x") : result.push(`${xNumber}x`);
  if (constant) result.push(constant);

  return result;
};

function solution(polynomial) {
  const filtered = filterPolynomial(polynomial);
  const [x, constant] = getPolynomialResult(filtered);
  const answer = formatPolynomial(x, constant);

  return answer.join(" + ");
}

두번째 리팩토링

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function solution(polynomial) {
  const answer = [0, 0];
  const splitted = polynomial.split(" + ");

  if (splitted.length === 1) return polynomial;

  splitted.forEach((term) => {
    let index = 0;
    if (term[term.length - 1] !== "x") index = 1;

    answer[index] += term === "x" ? 1 : parseInt(term);
  });

  if (!answer[0]) return `${answer[1]}`;
  if (!answer[1]) answer.pop();
  answer[0] === 1 ? (answer[0] = "x") : (answer[0] += "x");

  return answer.join(" + ");
}

# Level 0. 7의 개수

7의 개수

문제 설명

머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
function solution(array) {
  let answer = 0;
  array.forEach((num) => {
    while (num) {
      if (num % 10 === 7) answer++;
      num = Math.floor(num / 10);
    }
  });
  return answer;
}

# Level 0. 최댓값 만들기 (2)

최댓값 만들기 (2)

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
function solution(numbers) {
  let max = -Infinity;
  for (let i = 0; i < numbers.length; i++) {
    for (let j = i + 1; j < numbers.length; j++) {
      if (max < numbers[i] * numbers[j]) max = numbers[i] * numbers[j];
    }
  }
  return max;
}