안경잡이 구루루

백준 5073 (삼각형과 세 변) [Python/파이썬] 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 5073 (삼각형과 세 변) [Python/파이썬]

구루루(gururu) 2023. 9. 10. 17:19
반응형

https://www.acmicpc.net/problem/5073

 

5073번: 삼각형과 세 변

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

www.acmicpc.net

 


 

나:

while True:
  box = list(map(int,input().split(' ')))
  a,b,c= sorted(box,reverse=True)
  if a==0 and b==0 and c==0:
    break
  
  elif (a <b +c)==True :
    if a==b==c:
      print('Equilateral')
    elif a==b or a==c or b==c:
      print('Isosceles')
    else:
      print('Scalene')
  else:
    print("Invalid" )

 

완성된 코드는 위와 같다.

 

(1)
while True:
  box = list(map(int,input().split(' ')))
  a,b,c= sorted(box,reverse=True)
  if a==0 and b==0 and c==0:
    break

0 0 0 이라는 입력값이라는 특정 형태의 입력이 나오기 전까지 계속 입력을 받기 때문에 while True 무한 반복문을 사용했다.

받은 입력값은 box 리스트에 빈칸을 기준으로 정수값을 넣는다. 

그리고 받은 입력값은 항상 세 개만 받는 다는 것을 알기 때문에 각각은 알파벳 순서대로 a,b,c 로 입력 받을 수 있고 가장 큰 수부터 차례대로 정렬시켜 각 변수에  담는다.

이때 받은 입력값들이 모두 숫자 0인지 먼저 따져 True 이면 계산하지 않고 바로 이 반복문을 break 하도록 해준다.

 

(2)
  elif (a <b +c)==True :
    if a==b==c:
      print('Equilateral')
    elif a==b or a==c or b==c:
      print('Isosceles')
    else:
      print('Scalene')
  else:
    print("Invalid" )

문제에서 삼각형의 세변의 길이가 주어졌을 때  삼각형의 조건이 만족하는 경우를 먼저 따지고 

각각의 경우에 따라 Equilateral,  Isosceles, Scalene 로 나누어 판단해야한다. 

그래서 삼각형의 세변의 길이주어질 때 삼각형인지 아닌지 판단하는 방법은 가장 긴변이  나머지 두변의 길이의 합보다 작아야만 한다.

(이것의 이유 및 설명은 링크 참고   https://mathbang.net/92#gsc.tab=0   )

위 (1) 에서 내림차순 순서대로 a, b, c에 입력값을 받았기 때문에 a 가 가장 큰 수로 볼 수 있다. 

그래서 a<b+c 가 True 로 만족하면 삼각형으로 구현했다.

이후  세변이 모두 같을 때 Equilateral, 두변의 길이가 같을 때  Isosceles, 세변 모두 다른 경우 Scalene 의 경우를 조건문을 이용해 구현함


 

다른사람:

출처:  https://jinho-study.tistory.com/507

while 1:
    li = sorted(list(map(int, input().split())))
    if li[0] == li[1] == li[2] == 0:
        break
    if li[0]+li[1] <= li[2]:
        print("Invalid")
    elif li[0] == li[1] == li[2]:
        print("Equilateral")
    elif li[0]==li[1] or li[1]==li[2] or li[2]==li[0]:
        print("Isosceles")
    else:
        print("Scalene")

완성된 코드는 위와 같다. 

 li = sorted(list(map(int, input().split())))

 

위 코드에서 주목할 부분은 입력 받을때 부터 sort() 로 정렬한 상태로 받아 코드의 길이를 줄일 수 있다는 점이다. 

그래서 이 코드를 통해 li [2] 가 가장 큰 수로 정렬됬기 때문에

나와 마찬가지로 세변의 길이 조건을 통해 먼저 삼각형인지 아닌지를 조건문 if 로 따진후 

삼각형이 맞다면 elif 로 각 경우에 따라 따져서 출력하도록 구현했다. 

반응형