문제 바로가기
https://www.acmicpc.net/problem/4153
4153번: 직각삼각형
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
www.acmicpc.net


관련 알고리즘
- 수학
정답 및 해설
정수를 3개 입력받아서 세 정수로 이루어진 삼각형이 직각 삼각형인지 확인하는 문제이다.
직각삼각형은 가장 긴 변의 제곱이 나머지 두 변 각각의 제곱의 합과 같은지 확인하여 찾아낼 수 있다.
간단한 수학 문제이니 수식을 세워서 해결하기 간단한 문제이다.
그 전에 예제 입력으로 보아 항상 긴 변이 마지막에 올거라 생각할 수도 있겠지만
가장 긴 변을 찾아서 계산을 진행해주어야 한다. (본인은 이 이유로 틀렸다...)
C++
더보기
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c,tmp;
while(1){
cin>>a>>b>>c;
if(!(a||b||c)) break;
if(c<a){tmp=c;c=a;a=tmp;}
if(c<b){tmp=c;c=b;b=tmp;}
if(c*c==a*a+b*b) cout<<"right\n";
else cout<<"wrong\n";
}
}
| Line | 해설 |
| 5~14 | Line 4에서 변수를 선언한 다음 바로 무한루프 반복문으로 들어간다. |
| 6~7 | cin 함수로 세 정수 a,b,c를 입력받는다. 입력받은 후 바로 !(a||b||c) 조건으로 a,b,c가 모두 0이라면 break문으로 반복문을 종료한다. |
| 9~10 | if 조건문으로 c에 가장 큰 정수를 할당할 것이다. Line 9만 설명하자면 a가 c보다 크다면 tmp 변수를 매개로 a와 c의 값을 바꾸어준다. Line 10에서 b와 c를 비교하여 같은 과정을 진행한다. |
| 12~13 | c에 가장 큰 정수를 할당했기 때문에 c2=a2+b2 만 만족한다면 직각삼각형으로 판단하여 "right"를 출력한다. 아니라면 "wrong"을 출력하고 무한루프로 다시 Line 6으로 돌아가서 위 과정을 반복한다. |
'Coding > BOJ' 카테고리의 다른 글
| [BOJ 백준] 9012 - 괄호 (C++) (0) | 2023.11.25 |
|---|---|
| [BOJ 백준] 2869 - 달팽이는 올라가고 싶다 (C++) (0) | 2023.11.23 |
| [BOJ 백준] 1676 - 팩토리얼 0의 개수 (C++) (1) | 2023.11.20 |
| [BOJ 백준] 1546 - 평균 (C++) (0) | 2023.11.19 |
| [BOJ 백준] 1436 - 영화감독 숌 (C++) (0) | 2023.11.18 |