[백준] 2622 삼각형 만들기 JavaScript

·2024년 6월 5일

문제

같은 길이의 성냥개비가 여러 개 주어져 있다. 이것들을 평면에 늘어놓아서 삼각형을 만들려고 한다. 삼각형의 한 변은 여러 개의 성냥개비를 직선으로 이어서 만들 수 있지만, 성냥개비를 꺾거나 잘라서 변의 한 부분을 만들 수는 없다. 성냥개비의 개수가 주어졌을 때, 이들 성냥개비를 사용하여 만들 수 있는 서로 다른 삼각형의 개수를 구하는 프로그램을 작성하시오.

예를 들어서 9개의 성냥개비로 만들 수 있는 서로 다른 삼각형은 그림 1과 같이 3가지이다.

<주의사항>

주어진 성냥개비는 모두 사용하여 하나의 삼각형을 만들어야 한다.
삼각형을 한 개도 만들 수 없으면 0을 출력한다. 예를 들어서, 주어진 성냥개비의 수가 1, 2, 또는 4인 경우에는 삼각형을 한 개도 만들 수 없다.
합동인 삼각형들은 같은 삼각형으로 본다. 예를 들어서 성냥개비 5개를 사용하여 만들수 있는 그림 2의 삼각형들은 같은 삼각형으로 본다.

입력

첫째 줄에 성냥개비의 개수가 주어진다. 성냥개비의 개수는 1 이상 50,000 이하이다.

출력

첫째 줄에 만들 수 있는 삼각형의 개수를 출력한다.

예제 입력

9

예제 출력

3

내가 했던 풀이 방법

  1. 문제에서 제시한 1, 2, 4의 경우 바로 0을 출력하도록 함.
  2. 그 외에 경우 count를 0으로 두고, 2중 반복문을 사용한다. 이때, i는 1부터 j는 i부터 시작한다. num에서 둘의 합을 뺀 값이 k가 된다. 여기서 i, j, k는 각각 변의 길이가 된다. i<=j<=k로 두어야 가장 긴 변을 확정할 수 있으므로, j가 k보다 클 경우에는 다음 반복을 진행한다. 삼각형이 되기 위해서는 가장 큰 변의 길이가 다른 두 변의 길이의 합보다 작아야 한다. 그러므로, i+j가 k보다 클 경우에 count를 증가시켜준다.
  3. 모든 연산이 끝난 후 count를 출력한다.

코드

var fs = require('fs');
let num = fs.readFileSync(0, 'utf-8').toString().trim();

num = Number(num);

let count = 0;
if (num === 1 || num === 2 || num === 4) console.log(0);
else {
  for (let i = 1; i <= num; i++) {
    for (let j = i; j <= num; j++) {
      let k = num - i - j;
      if (k < j) break;
      if (i + j > k) count++;
    }
  }
  console.log(count);
}

회고

문제가 어려워서 기록한다기 보다는 삼각형이 되기 위한 조건을 자주 까먹는 것 같아서 잊지않기 위해 기록하는 문제.

profile
Frontend🍓

0개의 댓글