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() 의 차이점
공부하면서 헷갈렸던 정렬 함수 두 가지의 차이를 확실히 정리했다.
- list.sort()
- 리스트 원본을 직접 변경해버린다. (반환값이 None)
- 오직 리스트(list) 자료형에서만 쓸 수 있다.
- 예: my_list.sort()
- sorted(iterable)
- 원본은 건드리지 않고, 정렬된 새로운 리스트를 반환한다.
- 리스트뿐만 아니라 튜플, 문자열 등 다양한 반복 가능한 객체에 쓸 수 있다.
- 이번 문제처럼 입력받은 map 객체를 바로 정렬해서 변수에 담을 때 유용하다.
앞으로는 무조건 직접 구현하려 하기보다, 파이썬이 제공하는 효율적인 함수가 있는지 먼저 고민해봐야겠다.
'알고리즘 문제풀이 > 파이썬' 카테고리의 다른 글
| [백준/Python] 2563번: 색종이 - 2차원 배열과 좌표 정복하기 (1) | 2026.01.22 |
|---|