[프로그래머스 lev2/JS] 멀쩡한 사각형

woolee의 기록보관소·2022년 11월 8일
0

알고리즘 문제풀이

목록 보기
75/178

문제 출처

프로그래머스 lev2 - 멀쩡한 사각형

나의 풀이

w를 x좌표의 길이라고 생각하고, x좌표를 for loop를 돌면서 x에 해당하는 y값(각 x축과 만나는 y지점)을 구하면 이게 최대값이 된다.

그걸 넘어서면 박스를 사용하지 못하니까 그 최대값 이하로는 쓸 수 있는 박스.

1차 함수를 어떻게 구하냐면,
y(최대값) = -h/w * x + h(h는 x인가 y절편임)

그 최대값보다 낮은 정수를 answer에 전부 더하고. 이게 박스가 1차함수를 기준으로 2개로 나눠지는 거니까
answer * 2를 리턴하면 끝

function solution(w, h) {
  let answer=0;

  for (let i=1; i<=w; i++) {
    let max = ((-h/w)*i) + h;
    //console.log(max);
    answer += Math.floor(max);
  }
  return answer * 2;
}

console.log(solution(8, 12));

다른 풀이

  1. 사각형의 w와 h가 서로소인 경우 잘린 정사각형의 갯수 ⇒ w+h-1
  2. 사각형에서 서로소 관계의 사각형의 갯수 ⇒ 최대공약수
function solution(w,h){
  const gcd = (a, b) => {
      return b === 0 ? a : gcd(b, a % b);
  };

  return w * h - (w + h - gcd(w, h));
}

console.log(solution(8, 12));
profile
https://medium.com/@wooleejaan

0개의 댓글