728x90
level 2 : 멀쩡한 사각형
https://programmers.co.kr/learn/courses/30/lessons/62048?language=cpp
코딩테스트 연습 - 멀쩡한 사각형
가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을
programmers.co.kr
코드
//프로그래머스 멀쩡한 사각형
#include <iostream>
using namespace std;
int GCD(int w, int h) {
if (w % h == 0)
return h;
return GCD(h, w % h);
}
long long solution(int w, int h) {
long long answer = 1;
int gcd = GCD(w, h);
answer = (long long)w * h - ((long long)(w + h) - gcd);
return answer;
}
int main() {
int w = 8;
int h = 12;
cout << solution(w, h) << "\n";
return 0;
}
설명
(잘린 사각형) = (가로의 길이) + (세로의 길이) - (가로 세로의 최대공약수) 와 같은 공식을 찾아낼 수 있다.
예) w=2, h=3 이면
x | |
x | x |
x |
x 표시한 부분이 잘리게 된다. 잘린 사각형 = 2+ 3 -1 =4이다.
고찰
처음에 공식을 찾지 못하여 일차방정식으로 지나가는 사각형을 찾아 문제를 풀었었다.
검색하여 공식을 찾아보니 다음과 같은 규칙이 있었고 이번 문제에서 이런 규칙을 알지 못했으면 풀지 못했을거 같다.
더 공부하고 규칙을 찾으면서 공부해야할 거 같다.
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
알고리즘(C++) / 프로그래머스 level 2 : 짝지어 제거하기 (0) | 2021.07.26 |
---|---|
알고리즘(C++) / 프로그래머스 level 2 : 기능 개발 (0) | 2021.07.25 |
알고리즘(C++) / 프로그래머스 level 2 : 뉴스 클러스터링 (0) | 2021.07.21 |
알고리즘(C++) / 프로그래머스 level 2 : 조이스틱 (0) | 2021.07.18 |
알고리즘(C++) / 프로그래머스 level 2 : 구명보트 (0) | 2021.07.14 |
댓글