설명
삼각형 세 변의 길이가 주어질 때
- Equilateral : 세 변의 길이가 모두 같은 경우
- Isosceles : 두 변의 길이만 같은 경우
- Scalene : 세 변의 길이가 모두 다른 경우
삼각형 조건을 만족하지 못하는 경우 "Invalid"를 출력(가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않으면)
풀이
1. while 문으로 입력값과 출력을 반복
2. 입력값을 리스트에 저장한 후 오름차순 정렬
조건문
1. 입력값이 모두 0이면 반복문 중단
2. 첫 번째 값이 두 번째와 세 번째 길이를 합한 것보다 크거나 같다면 삼각형 조건에 맞지 않으므로 'Invalid' 출력
3. 첫 번째 값, 두 번째 값, 세 번째 값이 모두 같다면 ' Equilateral' 출력
- 삼각형 조건에 부합
4. 두 변의 길이가 같은 게 있다면 'Isosceles' 출력
- 삼각형 조건에 부합하나 같은 값이 2개만 있음
5. 위의 조건이 모두 해당하지 않으면 'Scalene' 출력
- 삼각형 조건에 부합하나 같은 값이 없다.
Solution
import sys
input = sys.stdin.readline
while True:
num = sorted(list(map(int, input().split())), reverse=True)
if num[0] == 0 and num[1] == 0 and num[2] == 0:
break
if num[0] >= num[1] + num[2]: #등호 안 붙여줘서 계속 오류
print('Invalid')
elif num[0] == num[1] == num[2]:
print('Equilateral')
elif num[0] == num[1] or num[1] == num[2] or num[2] == num[0]: #반례 1 1 2 답 : Invalid
print('Isosceles')
else:
print('Scalene')
👩💻 회고
1시간 풀이를 했지만 제출 실패를 하여 결국 다른 풀이를 보았다. 계속 틀린 이유는 조건문을 위 코드와 반대로 적었던 탓이라고 생각한다. 삼각형 조건에 부합하지 않는 것을 맨 밑에 적어버리니깐 중간에 추가로 또 조건을 추가해줘야 하는 예외가 끝없이 생겼다. ㅠㅠ 브론즈 문제였는데도 풀지 못해서 서럽다..
틀린 코드
if num[0] == 0 and num[1] == 0 and num[2] == 0:
break
if num[0] == num[1] == num[2]:
print('Equilateral')
elif num[0] == num[1]: # 반례 2 1 1 답 : Invalid -> 삼각형 조건에 부합하지 않는데 여기서 값이 도출
print('Isosceles')
else:
if num[0] >= num[1] + num[2]: # 등호 안 붙여줘서 계속 오류
print('Invalid')
elif num[0] != num[1] != num[2]:
print('Scalene')
그러나 문제점을 찾지 못했다.
이번에 배웠던 건 모든 조건에 부합하지 않는 걸 조건문 가장 윗쪽에 적어야 한다는 것!
'BOJ 코딩테스트 > Bronze' 카테고리의 다른 글
BOJ 5355번 : 화성 수학 (Python/구현/Bronze 2) (0) | 2024.03.16 |
---|---|
BOJ 3046번 : 삼각형과 R2 (Python/구현/Bronze 4) (0) | 2024.03.12 |
BOJ 2748번 : 피보나치 수 2 (Python/Bronze 1) (0) | 2023.09.25 |
BOJ 2587번 : 대표값2 (Python/Bronze 2) (0) | 2023.05.04 |
BOJ 6359번 : 만취한 상범 (Python/Bronze 2) (0) | 2023.04.13 |