-
백준 4153번 - 직각 삼각형(Python)Algorithm(in Python) 2023. 4. 12. 14:43
4153번 문제는 중학 수학에서 다루는 '피타고라스 정리'를 이용해 삼각형이 직각삼각형인지, 아닌지를 구하는 문제이다.
* 파이썬으로 머리 아프게 코딩한 경험이 너무 오래되어서 이번 스터디를 시작하며 '재활 운동' 겸 쉬운 문제부터 시작하게 되었는데, 이 문제는 브론즈 3 티어 문제다... 굉장히 쉽다는 거(상대적)
아무튼
문제 입력으로는 세 숫자 값(변의 길이)을 스페이스로 구분해서 받고, '0 0 0'이 입력되면 실행을 멈춘다.
def sqr(i,j,k): # 세 변의 값을 입력받음 - i가 가장 긴 변의 길이 cul = i**2 == (j**2 + k**2) # cul - 직각삼각형인지 아닌지 판단(cul의 값은 0 혹은 1) if(cul): # 직각삼각형이 맞을 때(cul 값이 1) print("right") else: # 직각삼각형이 아닐 때(cul 값이 0) print("wrong")
먼저 피타고라스 정리를 통해(가장 긴 변의 제곱이 나머지 변의 제곱의 합과 같은지) cul 값이 0 혹은 1로 정해진다.
아래 if문을 통해 직각삼각형이 맞으면 right, 아니면 wrong을 출력하도록. 비교를 두번 수행하기 때문에 코드가 불필요하게 중복되는 게 싫어서 함수를 만들었다. (아마 함수를 배운 누구든 똑같은 코드를 복붙하고 싶진 않을 것...)
while(a!=0 and b!=0 and c!=0): a, b, c = map(int, input().split()) # 세 변의 값 입력 if (a==0 and b==0 and c==0): # (0,0,0) 값이 입력되면 종료(break 수행) break if(a>b): # a가 b보다 큰 경우 -> (1차 승자) if(a>c): # a가 가장 큰 값인 경우 -> (2차 승자) sqr(a,b,c) else: # c가 가장 큰(크거나 같은) 값인 경우 -> (2차 승자) sqr(c,a,b) else: # b가 a보다 큰(크거나 같은) 경우 -> (1차 승자) if(b>c): # b가 가장 큰 값인 경우 -> (2차 승자) sqr(b,a,c) else: # c가 가장 큰(크거나 같은) 값인 경우 -> (2차 승자) sqr(c,a,b)
삼각형의 세 변에서 각 변의 길이에 대한 1,2,3위를 구하는 게 아니고 가장 긴 길이의 값만 구하는 것이기 때문에 부전승이 존재하는 3명의 가위바위보에서 승자를 구해내는 것처럼 처음에 두 수의 대소를 비교하고, 큰 수와 나머지 (비교 연산에 포함되지 않은; c) 수를 비교해서 가장 큰 수를 구해서 위에서 만든 함수를 적용해주는 방식으로 코드를 작성했다.
a,b,c 값을 입력받을 때 map 함수를 통해 3가지 수를 입력받고, split 함수로 각각의 수를 분리해준 다음 int형으로 각 변수에 입력했는데 처음에 코드를 작성할 때 아마 split 함수가 기본 값으로 공백을 통해 수를 구분한다는 것을 까먹고(...) 괄호 안에 잘못된 값을 입력했다가 출력 오류(...)가 떠서 억울했지만 다른 스터디원의 피드백 덕분에 해결했다...!
아무튼
되더랍니다...
난이도 조절을 잘못한 거 같아서 다음 주차부턴 실버 레벨의 문제 위주로 풀이를 해야겠다는 생각이 들었다
끝
'Algorithm(in Python)' 카테고리의 다른 글
백준 11727번 - 2×n 타일링 2(Python) (0) 2023.05.16 백준 1914번 - 하노이 탑(Python) (0) 2023.05.07 백준 1929번 - 소수 구하기(Python) (0) 2023.05.02