알고리즘 문제풀이/파이썬

[백준/Python] 4153번: 직각삼각형 - 정렬(sorted)과 내장 함수의 중요성

aerimi-code 2026. 1. 28. 12:59

1. 문제 정보

  • 문제 번호: 4153번
  • 문제 이름: 직각삼각형
  • 사용 언어: Python
  • 문제 링크: 백준 4153번 바로가기
  • 문제 요약: 세 변의 길이가 주어졌을 때, 이 삼각형이 직각삼각형인지 판별하는 문제다. 입력은 여러 개의 테스트 케이스로 주어지며, 마지막 줄에는 "0 0 0"이 입력된다. 직각삼각형이면 "right", 아니면 "wrong"을 출력

2. 접근방법

직각삼각형을 판별하는 공식인 피타고라스의 정리를 이용한다. 가장 긴 변 c 를 설정하는 알고리즘이 필요하다. (입력받은 세 변의 순서가 오름차순이 아닐 수 있으므로) 

 

=> 계산 전에 반드시 세 변의 길이를 오름차순으로 정렬해야한다. 

if 문을 사용해 a가 b보다 클 때 a가 c보다 크면 swap 
b가 더 큰 경우라면 c랑 스왑. 

이러면 c에 가장 긴 변이 오게 된다.

3. 코드 구현(Python)

while(True):
	#입력받기 종료 조건 "0 0 0" 
	line=input()
    strings="wrong"
    if(line=="0 0 0"):
    	break
        
    a,b,c=map(int,line.split())
    #가장 큰 값을 c로 설정
    if(a>b):
    	if(a>c):
        	temp=a
            a=c
            c=temp
        elif (b>c):
        	temp=b
            b=c
            c=temp
     #피타고라스 정의 이용       
     A=a*a
     B=b*b
     C=c*c
     
     if((A+B)==C):
     	strings="right"
        
     print(strings)


AI (copliot)에게 개선점을 물어봤다.

A. if문을 쓸 필요 없이, sorted 라는 내장함수를 사용하면 되었다.

while True:
    line = input()
    # "0 0 0"이 입력되면 반복 종료
    if line == "0 0 0":
        break
    
    # 입력받은 세 수를 정렬해서 a, b, c에 할당
    # sorted()를 쓰면 자동으로 작은 순서대로 [a, b, c]가 됨 -> c가 가장 긴 변
    a, b, c = sorted(map(int, line.split()))
    
    # 피타고라스 정리 확인
    if a**2 + b**2 == c**2:
        print("right")
    else:
        print("wrong")



4. 배운 점 & 회고 (TIL)


A. 내장 함수 활용

이번 문제를 통해 단순히 로직을 짜는 것뿐만 아니라, "이미 있는 도구(함수)를 잘 쓰는 것"의 중요성을 크게 느꼈다.

함수를 잘 알고 활용하는 것도 실력이다. 

B. sort() vs sorted() 의 차이점

공부하면서 헷갈렸던 정렬 함수 두 가지의 차이를 확실히 정리했다.

  1. list.sort()
    • 리스트 원본을 직접 변경해버린다. (반환값이 None)
    • 오직 리스트(list) 자료형에서만 쓸 수 있다.
    • 예: my_list.sort()
  2. sorted(iterable)
    • 원본은 건드리지 않고, 정렬된 새로운 리스트를 반환한다.
    • 리스트뿐만 아니라 튜플, 문자열 등 다양한 반복 가능한 객체에 쓸 수 있다.
    • 이번 문제처럼 입력받은 map 객체를 바로 정렬해서 변수에 담을 때 유용하다.

앞으로는 무조건 직접 구현하려 하기보다, 파이썬이 제공하는 효율적인 함수가 있는지 먼저 고민해봐야겠다.