BOJ. 4153

Opusdeisong·2022년 12월 22일
0

백준 Class2

목록 보기
2/31


#BOJ4153

직각삼각형

중학교 과정에서 나오는 피타고라스 정리를 사용하는 문제로 브론즈3 난이도로 책정된 문제답게 역시 초반 문제는 쉽군이라는 생각으로 해치우려고 했는데 이게 무슨일이람... 벌써 4번이나 틀렸다...

8달 전의 나는 고민도 안하고 파이썬으로 맞춘 이 문제를 나는 지금 4번이나 틀리면서 코드를 고치고 있다... 우선 원래의 내 코드는 이거였다.

#include <iostream>
using namespace std;


int main() {
  while (true){
    long long a, b, c, ans = 0;
    //문제 생길부분이 사실 여기 밖에 없다 생각해서
    //처음에는 int로 선언했다가 안전하게 long long까지 왔다.
    cin>>a>>b>>c;
    if (a == 0 && b == 0 && c == 0) break;
    ans = a * a + b * b;
    if (ans == c * c) cout<<"right"<<endl;
    else cout<<"wrong"<<endl;
  }
  return 0;
}

근데 놀랍게도 저 변수 선언의 문제가 아니었다... 당연히 변수 선언에서 문제가 생겼다고 생각했는데 고쳐도 "틀렸습니다"가 계속 나오니깐 혼란의 연속이었다. 그래서 동기에게 도움을 구했는데... 마지막 인풋이 항상 빗변이라는 조건이 없다는 동기의 말에 속는 셈 치고 최댓값을 찾는 코드를 추가하였다. 근데 놀랍게도 이게 맞았다... 아니 이게 맞네?? 그냥 NRV(비슷한 상황을 뜻하는 말이다...과애들하고 통용되어서 TMI로 넣어 보았다.) 당했다... 이거 틀리고 시플플 처음부터 다시 볼까 고민하고 있었는데 다행이다....

#include <iostream>
using namespace std;


int main() {
  while (true){
    long long a, b, c, temp = 0, ans = 0;
    cin>>a>>b>>c;
    if (a > b)
      if (a > c){
        temp = a;
        a = c;
        c = temp;
      }
    if (b > a)
      if (b > c){
        temp = b;
        b = c;
        c = temp;
      }
    if (a == 0 && b == 0 && c == 0) break;
    ans = a * a + b * b;
    if (ans == c * c) cout<<"right"<<endl;
    else cout<<"wrong"<<endl;
  }
  return 0;
}

조건 좀 잘 보자...

profile
Dorsum curvatum facit informaticum.

0개의 댓글