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를 써주어야지 몫이 구해진다는 점…

몫과 나머지를 안하고 그냥 나눠서 소수로 계산할시에 계산이 정확하지 않기때문에 분수 계산을 해주는 부분이 귀찮았다.