👀 문제
https://programmers.co.kr/learn/courses/30/lessons/62048
👊 도전
1. 설계
- 대각선 넓이의 규칙을 찾는다.
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
/**
*
* @author HEESOO
*
*/
class Solution {
public long solution(int w,int h) {
long answer = 1;
if(w<h){ // w가 더 크도록
int temp=w;
w=h;
h=temp;
}
int gcd=gcd(w,h);
answer=(long)w*(long)h-(w+h-gcd);
return answer;
}
public int gcd(int a, int b){ // 최대공약수
if(a%b==0) return b;
return gcd(b, a%b);
}
}
3. 결과
🤟 성공 🤟
4. 설명
- 대각선 넓이의 규칙을 찾는다
- 예시에서 똑같은 패턴이 4번 반복됨을 알 수 있다.
- 4는 8과 12의 최대공약수이다.
- w=2, h=3일 때 6-4=6-(3+2-1)=w*h-(w+h-1) 식을 도출할 수 있다.
- 최대공약수가 1 이상이면, gcd만큼 패턴이 반복되는 것이므로 (w/gcd+h/gcd-1)*gcd=w+h-gcd
- 따라서 해당 문제의 점화식은 w*h-(w+h-gcd)
👏 해결 완료!
참고
- [프로그래머스] 여행경로 (java)(43164) https://youjourney.tistory.com/111