코딩테스트/프로그래머스

[프로그래머스] 멀쩡한 사각형

쪼르뚜 2024. 10. 10. 15:26
728x90
반응형


🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/62048

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


반응형
728x90

👩‍💻 코드

using namespace std;

long long gcd(long long a, long long b){
    while (b != 0){
        long long temp = b;
        b = a % b;
        a = temp;
    }
    
    return a;
}

long long solution(int w, int h) {
    return ((long long)w*h) - w - h + gcd(w, h);
}

📝 풀이

대각선이 직사각형을 통과할 때, 가로선 또는 세로선과 교차할 때마다 새로운 격자칸에 들어갑니다.

따라서 w + h의 수가 대각선이 지나는 격자칸의 총 수라고 할 수 있습니다.

그러나, 주의 할 점은 대각선이 지나갈 때 가로선과 세로선을 동시에 교차하는 경우도 있다는 것입니다.

가로와 세로가 만나는 지점은 최대공약수(GCD)만큼 존재하게 됩니다.

최종적으로 대각선이 지나는 격자칸의 총 수를 구하는 공식은 w + h - gcd(w, h) 입니다.

 

요구 사항은 사용할 수 있는 정사각형의 개수를 구하는 것이니 최종 공식은 w * h - (w + h - gcd(w,h) 입니다.

이 공식을 풀어 w * h - w - h + gcd(w,h)로 변환하였고,

w와 h의 곱셈은 오버플로우가 발생할 수 있어 long long으로 형변환을 해줍니다.

728x90
반응형