https://programmers.co.kr/learn/courses/30/lessons/62048?language=java
최대 공약수를 이용해서 구할 수 있을 거라고까지 밖에 생각 하지 못해서 다른 사람의 코드를 참고하였다.
해결 방안
간단하게 말해서 전체에서 선이 그어지는 구간(흰색 부분)을 빼는 문제이다.
하지만 선이 그어지는 부분을 알아내는 방법이 어려웠다.
세로와 가로를 보고 각각 3칸 2칸 간격으로 일정하게 잘려지는 것을 보고 최대공약수의 영향을 받는다고 생각하였다.
한 패턴당 선이 그어지는 부분은 (w/gcd + h/gcd -1), 반복되는 패턴 갯수는 gcd 만큼이다.
* gcd 함수가 있다는 것을 발견하였다.
import java.math.* 라이브러리를 추가해주고
BigInteger.valueOf(int n1).gcd(BigInteger.valueOf(int n2))를 이용하여 gcd(최대공약수)를 구할 수 있다.
나중에 BigInteger로 구해진 값을 BigInteger변수.intValue()로 int형으로 바꿔줄 수 있다.
코드
import java.math.*;
// 멀쩡한 사각형
class Solution {
public long solution(int w, int h) {
long answer = 1;
BigInteger num1 = BigInteger.valueOf(w);
BigInteger num2 = BigInteger.valueOf(h);
// 최대 공약수 구하는 함수
int gcd = num1.gcd(num2).intValue();
answer = ((long) w * (long) h) - ((((long) w / gcd) + ((long) h / gcd) - 1) * gcd);
return answer;
}
}
'Development Logs > Algorithms' 카테고리의 다른 글
[JAVA] 프로그래머스 : 점프와 순간 이동 (Summer/Winter Coding(~2018)) (0) | 2020.09.02 |
---|---|
[JAVA] 프로그래머스 : 방문 길이 (Summer/Winter Coding(~2018)) (0) | 2020.09.01 |
[JAVA] 프로그래머스 : 약수의 합 (Level 1) (0) | 2020.08.28 |
[JAVA] 프로그래머스 : 소수 찾기 (Level 1) (0) | 2020.08.28 |
[JAVA] 프로그래머스 : 같은 숫자는 싫어 (Level 1) (0) | 2020.08.28 |