Stay Hungry Stay Foolish

BOJ 코딩테스트/Bronze

BOJ 5073번 : 삼각형과 세 변 (Python/구현/Bronze 3)

dev스카이 2024. 3. 6. 15:30
 

5073번: 삼각형과 세 변

각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.

www.acmicpc.net


설명

삼각형 세 변의 길이가 주어질 때
- 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')

그러나 문제점을 찾지 못했다.

 

이번에 배웠던 건 모든 조건에 부합하지 않는 걸 조건문 가장 윗쪽에 적어야 한다는 것!