https://www.acmicpc.net/problem/4153
4153번: 직각삼각형
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
www.acmicpc.net
풀이
두 가지 방법으로 풀었다. 첫 번째 풀이는 여러 입력 테스트 케이스를 배열에 모두 입력받아 각 케이스가 직각 삼각형의 조건을 만족하는지 확인하는 것이다. 결과 또한 배열에 모두 저장한 뒤 출력한다. 여러 개의 테스트 케이스를 각각 입력해도 예제 출력처럼 한 번에 결과가 출력되도록 풀어야 한다고 생각했는데, 아니었다..! 그래서 두 번째 풀이는 테스트 케이스를 입력할 때마다 조건을 만족하는지 확인하도록 했다.
코드
//첫 번째 풀이
#include <iostream>
#include <cmath> //pow 제곱
#include <cstring> //strcpy 문자열 복사
#include <algorithm> //sort 오름차순 정렬
#define MAX 50
int input[MAX];
char res[MAX][MAX];
using namespace std;
int main() {
for (int i = 0; ; i++) {
cin >> input[i];
if (!input[i]) break;
}
for (int i = 0, j = 0; input[i]; i += 3, j++) {
sort(&input[i], &input[i + 3]); //sort(시작 주소, 끝 주소 + 1)
if (pow(input[i], 2) + pow(input[i + 1], 2) == pow(input[i + 2], 2)) strcpy(res[j], "right");
else strcpy(res[j], "wrong");
}
for (int i = 0; res[i][0]; i++) {
cout << res[i] << endl;
}
}
//두 번째 풀이
#include <iostream>
#include <algorithm>
#define SIZE 1000
int arr[SIZE];
using namespace std;
int main() {
while(1) {
for (int i = 0; i < 3; i++) {
scanf("%d %d %d", &arr[i], &arr[i + 1], &arr[i + 2]);
if (!arr[i] && !arr[i + 1] && !arr[i + 2]) return 0;
sort(&arr[i], &arr[i + 3]); //sort(시작 주소, 끝 주소 + 1) 오름차순 정렬
if (arr[i] * arr[i] + arr[i + 1] * arr[i + 1] == arr[i + 2] * arr[i + 2]) {
printf("right\n");
break;
}
else {
printf("wrong\n");
break;
}
}
}
}
'BOJ' 카테고리의 다른 글
[c++] 백준 1748번: 수 이어 쓰기 1 (0) | 2022.03.21 |
---|---|
[c++] 백준 1966번: 프린터 큐 (0) | 2022.03.16 |
[c++] 백준 4949번: 균형잡힌 세상 (0) | 2022.01.28 |