나 개발자 진짜 되냐?

백준 C++ 4153번 직각삼각형 ( 피타고라스 정리 ) 본문

C++을 시작해봐요!/단계문제를 풀어보아요!

백준 C++ 4153번 직각삼각형 ( 피타고라스 정리 )

Snow Rabbit 2026. 2. 23. 18:26

 

벌써 2월 막주..!!

 

시간 진짜 빠르다..

2월 초에는 22일 언제 오나.. 8일 언제 오나.. 11일 언제 오나.. 그랬는데..

후루룩 갔다.

3월을 또 기다리며!

 

자! 오늘은 

직각삼각형 문제를 풀어보겠습니다!!

 


 

 

앞에 두 개 제곱해서 곱해준 값이 세 번째 값이면 right 출력을 하면 되는데

 

문제는

000이 나오면 종료해야 하고

아니면 계속 돌려야 하는데

계속 돌리는 와중이면 일단 while 1으로 무제한으로 돌리는 게 맞는 걸까?

 

 

라고 생각했는데 틀렸다.

 

예외... 가 뭘까? 식은 맞은 거 같은데

테스트케이스도 맞았었다.

 

늘 요즘 이렇게 예외 찾는 게 굉장히 어려운 일이라고 생각이 든다.

 

일단 혹시 몰라서 사이즈도 바꿔보고

a == 0 도 b 랑 c까지 다해주었다.

 

근데도 틀렸다..

 

모르겠어서 반례를 알려달라고 했다.

아차차.....

반례는 이거였다

5 3 4면 어떡할래? 였다.

 

즉 가장 긴 변이 c여야 하는 거지 모든 값에 c가 제일 큰 값이 들어온다고 말하진 않았다..

와...

무슨 추리소설 읽는 느낌이랄까..

 

그렇다면!

들어오는 a b c 중에서 가장 큰 수가 무엇인지 찾아야 한다.

 

배열로 할지, 뭐 if문으로 할지 고민했는데..

제씨는 배열이 가장 깔끔하다고 하여 배열로 풀었다.

 

 

 

 

이거보다 더 글을 줄일 수 있을 거 같은데... 하며

가장 효율적인 식을 알려달라고 했더니

 

while문 안에 조건을 두면 0일 때. return을 해줄 필요가 없다고 했다.

 

while( cin >> a [0] >> a [1] >> a [2] && (a [0] || a [1] || a [2]) ) 이렇게 해주고

 

cin >> a [0] >> a [1] >> a [2]

이 식은

while문에 넣게 되면 이 세 가지 숫자를 cin으로 받으면 true를 반환한다.

 

a [0] || a [1] || a [2] 

이 식은

세 숫자가 하나라도 0이 아니면 루프를 계속 돌 것이고

0 0 0 이 나오면 or이 틀려서 false가 될 테니 while을 나오게 된다.

 

 

더 간결한 식 완성!

 


 

예외 생각 못하는 게 조금 아쉬운데..

아니 근데 아무리 생각해도 안 떠오르는걸......

창의력이 부족한가? 아 나 방탈출게임 할 줄 아는데... 후..

과연 나 코테 잘 볼 수 있나 모르겠다ㅏㅏ아

 

그래도 고생은 했다.