본문 바로가기
알고리즘/CodeUp PS

[CodeUp][Python] 1218번 : 삼각형 판단하기

by 빛밤하늘 2021. 8. 29.
반응형

밑의 링크는 CodeUp에서의 문제 링크입니다.

문제는 링크를 통해서 직접 봐주시길 바랍니다.

 

삼각형 판단하기

삼각형의 3변의 길이 a, b, c가 입력으로 주어진다. 여기서 입력되는 변의 관계는 a ≤ b ≤ c 이다.  그 삼각형이 무슨 삼각형인지 출력하시오.

codeup.kr

 

 

 

주의해야 할 점

1. map, split을 사용하는 입력 방식

실수나 정수인 여러 값들이 입력값일 때,

split 메서드를 사용해 공백이나 어떤 문자를 기준으로 입력값을 여러 값들로 분리하고,

map 내장 함수로 각각의 값들을 int형이나 float형으로

정수, 실수 자료형으로 변환하는 하는 기법은 매우 많이 쓰입니다.

코드 이해부터 하고 나면 다른 문제에서도 외운 듯이 사용해봅시다.

num1, num2 = map(int, sys.stdin.readline().split())

 

2. 조건의 순서

문제의 도움말 항목에서도 '조건의 순서가 매우 중요합니다.'라고 강조해줍니다.

저는 이걸 미처 못 보고 그냥 생각없이 차례대로 구현해 잘못된 풀이 결과를 한 번 봤습니다.

제대로 된 출력을 내려면 문제에서 주어진 각종 삼각형 조건들을 어떤 순서로 구현해야할 지 

정답이 떠오를 때까지 고민해보세요.

 

3 삼각형의 성립 조건

세 변의 길이가 주어졌을 때 삼각형이 가능한 조건이 어떤지 알고 있어야 풀 수 있습니다.

이전에 풀어본 1212번 문제에서 이와 똑같은 조건이 나왔었습니다.

밑의 링크는 1212번 문제를 풀고 해설한 포스팅입니다. 이 문제도 풀고 한 번 보시길 바랍니다.

 

[CodeUp][Python] 1212번 : 삼각형의 성립 조건

밑의 링크는 CodeUp에서의 문제 링크입니다. 문제는 링크를 통해서 직접 봐주시길 바랍니다. 삼각형의 성립 조건 삼각형이 가능하면 "yes", 삼각형을 만들 수 없다면 "no"를 출력하시오. codeup.kr 주의

brightnightsky77.tistory.com

 

예제 설명

1. 첫 번째 예제

- 입력

3 3 3

 

- 출력

정삼각형

 

- 설명

입력한 세 변의 길이는 3, 3, 3입니다.

가장 긴 변의 길이 3이 나머지 두 변의 길이의 합 6보다 작으므로, 삼각형이 가능합니다.

세 변의 길이가 같으므로 문자열 '정삼각형'을 출력합니다.

 

생각한 풀이 과정

세 변의 길이 a, b, c를 입력합니다. a <= b <= c입니다.

먼저 세 변으로 삼각형이 가능한지 불가능한지를 판단합니다.

 

가장 긴 변의 길이 c가 나머지 두 변의 길이의 합인 a+b보다 작다면 삼각형이 가능합니다.

그렇지 않으면, 즉, 가장 긴 변의 길이 c가 나머지 두 변의 길이의 합인 a+b보다 크거나 같다면 삼각형이 불가능합니다.

삼각형이 불가능하면, 문자열 '삼각형아님'을 출력합니다.

 

세 변으로 삼각형이 가능할 때,

세 변의 길이가 같다면, 정삼각형이므로 문자열 '정삼각형'을 출력합니다.

세 변 중 두 변의 길이만 같다면, 이등변삼각형이므로 문자열 '이등변삼각형'을 출력합니다.

피타고라스의 정리인 a^2 + b^2 = c^2를 만족하면, 직각삼각형이므로 문자열 '직각삼각형'을 출력합니다.

위의 삼각형 중 어느 것도 아니면, 문자열 '삼각형'을 출력합니다.

 

 

제출한 파이썬 코드

# readline을 사용하기 위해 import합니다.
from sys import stdin


# 삼각형의 세 변의 길이 a, b, c를 공백으로 구분해 입력합니다.
# a <= b <= c
# 각각 정수형으로 변환합니다.
a, b, c = map(int, stdin.readline().split())

# 먼저 삼각형인지 아닌지를 판단해야 합니다.
# 더 짧은 두 변의 길이의 합이 가장 긴 변의 길이보다 크다면
if a + b > c:
    # 일단 삼각형이 성립됩니다. 이제 무슨 삼각형인지 구분해봅니다.
    # a, b, c의 길이가 모두 같다면
    if a == b and b == c:
        # 문자열 '정삼각형'을 출력합니다.
        print('정삼각형')
    # a, b, c 중 두 변의 길이만 같다면
    elif a == b or b == c or a == c:
        # 문자열 '이등변삼각형'을 출력합니다.
        print('이등변삼각형')
    # 피타고라스의 정리인 a^2 + b^2 = c^2를 만족하면
    elif a ** 2 + b ** 2 == c ** 2:
        # 문자열 '직각삼각형'을 출력합니다.
        print('직각삼각형')
    # 위의 조건들에 하나도 해당하지 않으면
    else:
        # 문자열 '삼각형'을 출력합니다.
        print('삼각형')
# 더 짧은 두 변의 길이의 합이 가장 긴 변의 길이보다 작거나 같다면
else:
    # 삼각형이 될 수 없으므로, 문자열 '삼각형아님'을 출력합니다.
    print('삼각형아님')

 

제출 결과

CodeUp 1218번 : 삼각형 판단하기에서 코드 제출 결과
CodeUp 1218번 : 삼각형 판단하기에서 코드 제출 결과

 

느낀 점

처음에 제출한 코드에서는 조건의 순서에 유의하지 않고

그냥 문제의 조건에 따라 차례로 if ~ elif ~ else 조건문으로 만들었습니다.

그러니 20 20 110 입력 케이스와 같이 삼각형이 아닐 경우를 넣어도

두 변이 같다는 조건식에 걸려 '이등변삼각형'을 출력해 잘못된 풀이 결과가 나오게 되었습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

※ 공감 버튼과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍

반응형

댓글