코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | X |
코딩테스트 연습 - 멀쩡한 사각형
가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을
programmers.co.kr
class Solution {
public long solution(int w, int h) {
long answer = (long) w * h;
int temp = 0;
for (int i = Math.min(w, h); i >= 1; i--) {
if (w % i == 0 && h % i == 0) {
temp = i;
break;
}
}
return answer - ((w / temp) + (h / temp) - 1) * temp;
}
}
테스트 1 〉 | 통과 (0.07ms, 71.1MB) |
테스트 2 〉 | 통과 (0.15ms, 76.3MB) |
테스트 3 〉 | 통과 (0.11ms, 72.8MB) |
테스트 4 〉 | 통과 (0.11ms, 77.2MB) |
테스트 5 〉 | 통과 (0.11ms, 74.2MB) |
테스트 6 〉 | 통과 (0.22ms, 75.8MB) |
테스트 7 〉 | 통과 (0.06ms, 71MB) |
테스트 8 〉 | 통과 (0.17ms, 72.7MB) |
테스트 9 〉 | 통과 (0.06ms, 74.5MB) |
테스트 10 〉 | 통과 (0.05ms, 74.1MB) |
테스트 11 〉 | 통과 (0.08ms, 77.5MB) |
테스트 12 〉 | 통과 (0.05ms, 77.5MB) |
테스트 13 〉 | 통과 (29.33ms, 85.3MB) |
테스트 14 〉 | 통과 (0.06ms, 77.5MB) |
테스트 15 〉 | 통과 (45.74ms, 79.3MB) |
테스트 16 〉 | 통과 (1.08ms, 77.4MB) |
테스트 17 〉 | 통과 (20.04ms, 80.8MB) |
테스트 18 〉 | 통과 (0.07ms, 73.7MB) |
테스트 케이스의 위 도형을 보면 대각선이 꼭지점을 지나는 부분은
( 0 0 ), ( 2 3 ), ( 4 6 ), ( 6, 9 ), ( 8 12 ) 이다.
이걸 봤을 때 가로는 2씩, 세로는 3씩 커지는 것을 볼 수 있는데
각각 가로 세로 높이를 2와 3으로 나눠보면 4라는 숫자가 나오는 것을 알 수 있다.
가로와 세로가 8과 12라는 것을 봤을 때 최대공약수인 것을 알 수 있다.
그래서 최대 공약수를 구하고
최대 공약수를 이용해서 반복하는 칸에서 대각선이 지나가는 칸을 구해야하는데
위의 예제에서도 4칸인데, 다른 도형의 경우도 계산을 해보면 반복되는 가로 길이 + 반복되는 세로 길이 - 1이라는 공식이 나온다.
최종 공식은 전체 크기 - {(가로 / 최대공약수) + (세로 / 최대공약수) - 1 } * 최대공약수 이다.
참고 링크
[프로그래머스] 멀쩡한 사각형
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/62048 코딩테스트 연습 - 멀쩡한 사각형 | 프로그래머스 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로..
taesan94.tistory.com
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[kotlin] 프로그래머스 - 이상한 문자 만들기 (1단계) (0) | 2022.04.06 |
---|---|
[kotlin] 프로그래머스 - 자릿수 더하기 (1단계) (0) | 2022.04.06 |
[Java] 프로그래머스 - 내적 (1단계) (0) | 2022.04.06 |
[Java] 프로그래머스 - 음양 더하기 (1단계) (0) | 2022.04.05 |
[kotlin] 프로그래머스 - 자연수 뒤집어 배열로 만들기 (1단계) (0) | 2022.04.05 |