어떻게 풀까? (문제를 풀고 처음 든 생각)
주어진 세변의 길이가 직각인지 아닌지 구분하려면
a의 제곱 + b의 제곱 = c의 제곱이 되어야한다.
이 때 c는 a나 b보다 큰 수여야 한다.
각 테스트케이스는 모두 30000보다 작은 양의 정수로 주어졌으므로 int를 써도 될 것 같다.
- while문을 써서 무한반복을 한다.
- 숫자 3개를 입력받는다.
- 만약 숫자 3개가 다 0이면 break를 써서 while문을 빠져나와 프로그램이 종료가 된다.
- 숫자 3개를 배열 안에 넣는다.
- 배열을 오름차순으로 정렬한다.
- 첫번째 배열 값의 제곱과 두번째 배열 값의 제곱의 합이 세번째 배열 값의 제곱과 같은지 확인한다.
- 맞으면 right를, 틀리면 wrong을 출력한다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
while(1) {
int arr[3] = { 1,1,1 }; // 배열 초기화
int a, b, c;
cin >> a >> b >> c;
if (a == 0 && b == 0 && c == 0) { // 만약 수가 다 0이면
break; // while문 탈출
}
arr[0] = a;
arr[1] = b;
arr[2] = c;
sort(arr, arr + 3); // 배열 오름차순으로 정렬
if ((arr[0] * arr[0]) + (arr[1] * arr[1]) == arr[2] * arr[2]){ // a^2 + b^2 = c^2이라면
cout << "right\n";
}
else { // 아니라면
cout << "wrong\n";
}
}
}
결과
다행히도 한 번에 맞았다!
후기
제곱을 할 때 arr[n] * arr[n]이 아니라 pow(arr[n], 2)를 써도 좋았을 것 같다.
순간적으로 배열을 정렬하는 방법이 잘 기억이 나지 않았다. sort(arr, arr + 배열의 크기)를 잊지말자.
(내림차순은 sort(arr, arr + 배열의 크기, greater<자료형>())을 사용하면 된다.)
'Baekjoon(C++)' 카테고리의 다른 글
[백준] 1874번: 스택 수열 C++로 풀어보기 (0) | 2023.07.17 |
---|---|
[백준] 5397번: 키로거 C++로 풀어보기 (0) | 2023.07.15 |
[백준] 1919번: 애너그램 만들기 C++로 풀어보기 (0) | 2023.07.15 |
[백준] 2609번: 최대공약수와 최소공배수 C++로 풀어보기 (0) | 2023.07.13 |
[백준] 27866번: 문자와 문자열 C++로 풀어보기 (0) | 2023.07.13 |