Algorithm
[Programmers] 멀쩡한 사각형
검정색필통
2023. 3. 31. 08:50
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/62048
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이
몫과 나머지를 나누어서 푼다.
가로와 세로중 큰걸 작은걸로 나누어서 한칸 지날때마다 얼마나 영역을 차지하는지 계산한다.
예를 들어, w=8, h=12면
작은 w기준으로 첫번째 칸에서는 12/8 = 1 … 4 → 두칸 차지한다.
다음 칸은 1과 4/8 + 1과 4/8해서 3이기 때문에 → 두칸 차지한다.
즉, 분수의 덧셈을 계속해서 나머지가 0이면 정수부의 next - prev
나머지가 있으면 next - prev + 1이된다.
3. 결과

4. 코드
function solution(w, h) {
var answer = w * h;
var large = Math.max(w, h);
var small = Math.min(w, h);
var q = parseInt(large / small);
var r = large % small;
var i = 0;
var j = 0;
var subBlock = 0;
for(var k=0; k < small; k++){
var i2 = i + q;
j += r;
i2 += parseInt(j / small);
j = j % small;
if(j==0){
subBlock += i2 - i;
}else{
subBlock += i2 - i + 1;
}
i = i2;
}
return answer - subBlock;
}
5. 어려웠던 점
자바스크립트의 경우 parseInt를 써주어야지 몫이 구해진다는 점…
몫과 나머지를 안하고 그냥 나눠서 소수로 계산할시에 계산이 정확하지 않기때문에 분수 계산을 해주는 부분이 귀찮았다.