일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- 없는 숫자 더하기
- js
- 다이내믹 프로그래밍
- 1620
- 2018 KAKAO BLIND RECRUITMENT
- react
- 정수 삼각형
- codeSyntaxHighlight
- 옵셔널 체이닝 연산자
- BOJ
- 10162
- 깊이 우선 탐색
- Git Convention
- 주식 가격
- 숫자 문자열과 영단어
- 구간 합 구하기 4
- 브루트포스 알고리즘
- javascript
- C++
- 소수 체크
- colorSyntax
- Hasing
- 위클리 챌린지
- mermaid js
- 18111
- 이분탐색
- 4796
- n^2 배열 자르기
- 5525
Archives
- Today
- Total
개발하는 kim-hasa
[c++][프로그래머스] 멀쩡한 사각형 본문
https://programmers.co.kr/learn/courses/30/lessons/62048
코딩테스트 연습 - 멀쩡한 사각형
가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을
programmers.co.kr
가로세로가 주어진 직사각형 종이에 대각선이 그어져 있는데, 그어진 조각은 사용할 수 없으므로 멀쩡한 조각만 찾는 알고리즘입니다.
계산 방법이 있는데, 대각선이 지나가는 사각형의 개수는 가로 + 세로 - 최대공약수 입니다.
그러므로 총 사각형의 개수는 총 개수 - 가로 - 세로 + 최대공약수 입니다.
다만 수가 1억 이상이다보니, int형을 longlong으로 변환하는 과정에서 오류가 많이 나서 헷갈린 부분이 있었습니다.
long 형에 int * int를 넣는 경우, 두 수를 곱한 다음에 형변환을 하게 되므로 long형으로 계산되도록 형을 지정해 주었습니다.
using namespace std;
long long solution(int w,int h) {
long long answer = 1;
long long multi = (long)w*h; // 총 박스의 개수
long long sum = w + h; // 합계
int div = 2; // 나누는 변수
long long count = 1; // 최대공약수
if(w == h)
{
answer = multi - w; // 같은 경우
return answer;
}
while(div <= w && div <= h)
{
if(w % div == 0 && h % div == 0) // 둘다 나눠지는 경우
{
w = w/div;
h = h/div;
count = count * div; // 최대공약수를 구함
}
else
{
div++;
}
}
answer = multi - sum + count;
return answer;
}
'Algorithm > Programmers(c++)' 카테고리의 다른 글
[c++][프로그래머스] 짝지어 제거하기 (0) | 2021.08.19 |
---|---|
[c++][프로그래머스] 영어 끝말잇기 (0) | 2021.08.18 |
[c++][프로그래머스] 피보나치 수 (0) | 2021.08.17 |
[c++][프로그래머스] 124 나라의 숫자 (0) | 2021.08.17 |
[c++][프로그래머스] 최댓값과 최솟값 (0) | 2021.08.16 |