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

hhkim·2023년 11월 13일
0

Algorithm - JavaScript

목록 보기
178/188
post-thumbnail

풀이 과정

  1. 두 변 중 짧은 변이 w라고 하면 1부터 w까지 증가하면서 반복
  2. 현재 반복하는 수가 x일 때 세로로 전체 직사각형 h개 중 대각선이 지나는 사각형의 수는 기울기 * x를 올림한 수 - 기울기 * (x - 1)을 버림한 수
    기울기는 h / w
  3. 2를 누적하면 대각선이 지나는 사각형의 수를 구할 수 있음

코드

function solution(w, h) {
  const [big, small] = [Math.max(w, h), Math.min(w, h)];
  let cnt = 0;
  for (let i = 1; i <= small; ++i) {
    cnt += Math.ceil((big * i) / small) - Math.floor((big * (i - 1)) / small);
  }
  return w * h - cnt;
}

🤔

처음에 그림 그려가면서 최대공약수로 나름 규칙을 찾았었는데, 최대공약수가 1인 경우에는 규칙이 잘 먹히지 않았다.
사람들의 힌트를 봐도 잘 이해가 안 되다가 다시 그림 그리면서 보니까 기울기 방법이 갑자기 이해가 됐다.
(3, 5) 같은 경우를 그림 그리면서 해보는 걸 추천!

또 원래 기울기를 먼저 구해두고 값을 누적했는데, 테케 3개인가 통과를 못해서 찾아봤더니 나누기 연산 시에 소수점 이하 값이 정확하지 않아서 문제가 생기는 사람들이 많았다. 다른 사람 답을 참고해서 나누기를 나중에 수행했더니 통과가 돼서 이건 좀 어이가 없었다...


6월부터 프로그래머스 자바스크립트 문제를 레벨 0부터 차근차근 풀기 시작해서 드디어 오늘 1000위 안으로 들어왔다! 😁

0개의 댓글