개발공부/코딩테스트 연습문제

[프로그래머스] Level.2 - 멀쩡한 사각형

ku-na 2022. 1. 18. 11:23

문제 설명과 제한사항

예시

 

풀이

class Solution {
    public long solution(int w, int h) {
        long answer = 0;
        double width = w;
        double height = h;        
        double tmp = 0;
        for(int i=1; i<=w; i++) {        	
        	tmp = Math.floor(height - height/width*i);
        	answer += tmp;
        }
        
        return answer*2;
    }
}

 

++ 

다른 직사각형도 그려보고 했지만 모르겠어서 고민하다 검색해서 풀이방법을 찾았다.

다양한 풀이 방법이 있었는데 기억에 남는건 첫번째는 최대공약수를 찾아 패턴을 찾는방법이었고

두번쨰는 저 대각선을 함수로 생각하고 y = h/w*x 형식으로 높이를 찾아 사용할 수 있는 정사각형의 갯수를 더하는 방법이었다.. 보고 뒤통수가 얼얼했다.

이런식으로 y = 12/8*x 의 그래프를 만든것이다. 

저런 부류의 다양한 방식이 있었다. 신기하고 좋은 풀이 였다.

 

+++

class Solution {
    public long solution(int w, int h) {
        long answer = 0;
        for(int i=1; i<w; i++) {        	
        	answer += (long)h*(long)i/(long)w;
        }
        return answer*2;
    }
}

이렇게도 가능하다..

원래 이게 처음 풀이였는데 같은 테스트가 계속 실패했고, 실행시간이 길었던 걸로 보아 큰 값이 테스트에 있어 int 형으로 쓰레기값이 들어갔나보다. 혹시나 해서 전부 형변환 하니까 테스트 성공했다..