티스토리 뷰
Solved.ac Class 완전정복 프로젝트
Class : 2 ~ 2 ++
링크
https://www.acmicpc.net/problem/4153
문제
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
입력
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
출력
각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
접근방법
직각 삼각형에서는 피타고라스 정리가 성립하므로, 피타고라스 정리에 의한 접근을 생각하고 풀이로 들어가자.
풀이
피타고라스 정리는 다음과 같다.
"작은 두변의 제곱의 합은 가장 긴변의 제곱의 합과 같다."
문제에서는 오름차순으로 데이터를 준다는 조건이 없으므로, 첫번째 변이 길 때, 두번째 변이 길 때, 세번째 변이 길때의 경우를 모두 확인하여, 판단하면 된다.
코드
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Main test =new Main();
}
public Main() throws IOException {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
while(true){
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
if(num1==num2 && num2 ==num3 && num3 ==0){
break;
}else{
sb.append(solution2(num1,num2,num3)+"\n");
}
}
System.out.println(sb);
}
public String solution2(int num1,int num2,int num3){
boolean toggle = false;
if(num1*num1 + num2*num2 == num3*num3){
toggle =true;
}else if(num1*num1 + num3*num3 == num2*num2){
toggle =true;
}else if(num3*num3 + num2*num2 == num1*num1){
toggle =true;
}
if(toggle) return "right";
return "wrong";
}
}
결과
위의 스크린 샷에서 보듯, 굉장히 많은 틀린 횟수가 존재한다. 그럼에도 불구하고 실패원인을 따로 포스팅하지 않은 것은 왜 틀렸는지 아직도 이해가 안간다. 위의 코드와 다른방식으로 구성된 코드인데, 실수를 찾을 수가 없다....
(혹시라도 원인을 안다면, 댓글로 남겨주세요. 코드는 더보기에 넣어놓겠습니다.)
참고로 int형, Math.pow, Math.sqrt 다 안됩니당~^^
import java.util.Arrays;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
Main test =new Main();
}
public Main() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb =new StringBuilder();
while (true){
String[] strs = br.readLine().split(" ");
double[] datas = new double[strs.length];
for (int i = 0 ; i < strs.length ; i++){
datas[i] = Double.parseDouble(strs[i]);
}
if(datas[0] == 0 &&datas[1] == 0 &&datas[2] == 0 ){
break;
}
sb.append(solution(datas)+"\n");
}
System.out.println(sb);
}
public String solution(double[] datas){
boolean toggle = false;
if(datas[0]*datas[0]+datas[1]*datas[1] == datas[2]*datas[2]){
if(datas[0]+datas[1] > datas[2]){
toggle = true;
}
}
if(toggle) return "right";
return "wrong";
}
}
]
포스팅에 문제가 있거나, 설명이 잘못된 부분 지적 환영합니다.
더 나은 퀄리티의 콘텐츠를 제공할 수 있도록 노력하겠습니다.
읽어주셔서 감사합니다.
'공부 > 코딩 테스트 준비' 카테고리의 다른 글
[백준] 10828 - 스택 JAVA (0) | 2021.08.29 |
---|---|
[백준] 15829 - Hashing JAVA (0) | 2021.08.29 |
[백준] 11866 - 요세푸스 문제0 JAVA (0) | 2021.08.26 |
[백준] 2164 - 카드2 JAVA (0) | 2021.08.25 |
[백준] 2775 - 부녀회장이 될테야 JAVA (0) | 2021.08.25 |
- Total
- Today
- Yesterday
- DFS
- looker instance 접속
- 코딩테스트
- 백준
- 아기상어미워
- 자바
- BFS
- Spring
- db
- value annotation
- 파이썬
- 프로그래머스 문제정복
- 하루 회고
- 실패일기
- looker core
- 그래프 탐색
- 플루이드 와샬
- 카카오
- java
- Database
- Python
- 유클리드-호제법
- 브루트포스
- 재귀
- 9019
- dml
- JNDI연동
- 프로그래머스
- 아기상어나쁜상어
- DP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |