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

+ Recent posts