Bin's Blog

[프로그래머스] Level2 - 멀쩡한 사각형(Javascript) 본문

Algorithm

[프로그래머스] Level2 - 멀쩡한 사각형(Javascript)

hotIce 2023. 6. 5. 19:43
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

▶ 문제 요약

1. 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기이다. 

2. 누군가가 이 종이를 대각선 꼭지점 2개를 잇는 방향으로 잘라 놓았다.

3. 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태이다. 

4. 이 종이에서 1cm x 1cm로 잘라 사용할 수 있는 만큼만 사용하자. 정사각형 개수를 구해라

 

▶ 정답 코드

function solution(w,h) {
   const slope = h / w;
   let result = 0;
   
   for (let i = 1; i <= w; i++) {
       result += Math.ceil(slope * i)
   }
   
   return ((w * h) -result) * 2;

}

 

▶ 풀이 과정

1. slope는 대각선의 기울기로, h를 w로 나눈 값이다. h와 w간의 비율을 나타내며, 대각선이 지나가는 각 i 위치에서 사용할 수 없는 정사각형의 개수를 계산한다. 

 

2. for 루프는 1부터 가로 길이까지 돌면서 사용할 수 없는 정사각형의 개수를 result에 더한다. 각 위치에서 사용할 수 없는 정사각형의  개수는 Math.ceil(slope * i)로 계산된다. 이는 대각선이 해당 위치이에서 얼마나 많은 정사각형을 가로질러 지나가는지를 계산하는데 사용

 

3. 마지막으로 전체 정사각형의 개수에서 사용할 수 없는 정사각형의 개수를 뺀 후 2배하여 사용할 수 있는 정사각형의 개수를 나타낸다. 이는 대각선으로 인해 생성된 두 개의 삼각형 각각에 대해 계산하기 때문에 2배를 하는 것이다.

728x90