프로그래머스 멀쩡한 사각형 자바 - 2019 Summer/Winter Coding
문제
주어진 너비와 넓이가 정해진 직사각형을 끝과 끝을 대각선으로 그었을 때 그 직선의 포함되지 않는 1cm x 1cm 크기의 정사각형의 수를 구하는 문제이다.
접근
- 대각선은 결국 1차원의 직선의 기울기와 같다. 기울기 = h/w
- h의 값에 따라 직선의 w값을 구하고 이를 높이에서 빼준 값을 더하면 된다.
풀이
1번
public long solution(int w,int h) {
long answer = 0;
double lean = (double)h/w;
for(int i=1 ; i<w ; i++) {
double temp = lean * i;
int ceilVal = (int) Math.ceil(temp);
answer += h - ceilVal;
}
return answer * 2; //반으로 쪼개졌으니까... 위 아래 총 2개
}
- h / w 를 통해 직선의 기울기를 구한다.
- temp = 기울기 x i 에 대입하여 temp 값을 구한다. 이 문제에서는 기울기가 3/2 이므로 1.5 3.0 4.5 …. 이런식으로 증가한다.
- Math.ceil() 의 함수를 이용하여 같은 같이면 그 수로 바꿔주고 그보다 큰 값인 정수로 바꿔준다.
- 높이인 h에서 구한 ceilVal을 매번 빼주고 answer의 계산값을 더해주면 된다.
멀쩡한 스퀘어 문제의 난이도가 레벨 2치고는 많이 쉬운편인 것 같다. 난이도 하향조정이 필요해 보이는 문제로 보인다.
결론
- 직선은 기울기를 활용하고 Math 클래스의 메소드는 반드시 알아야 하는것 같다.
- Math 클래스 메소드