백준 5073번 바로가기

백준 10101번과 매우 유사한 문제. 1) 입력의 형태, 2) 변이 주어진다는 점을 제외하면 풀이가 동일하다.

나의 풀이

import sys
for s in sys.stdin:
  if s == '0 0 0\n':
    break
  else:
    s=[int(i) for i in s.split()]
    if max(s) >= sum(s) - max(s):
      print('Invalid')
    else:
      print(['','Equilateral','Isosceles','Scalene'][True*len(set(s))])

고수의 풀이

for i in[*open(0)][:-1]:a,b,c=sorted(map(int,i.split()));print(['Invalid','Equilateral','Isosceles','Scalene'][(a+b>c)*len({a,b,c})])

출처

CODE REVIEW

  1. 위 코드 모두 논리는 같다. 1) 삼각형의 결정조건 확인 2) 각 list를 set로 바꿔서 변에 따라 정삼각형/이등변삼각형/일반삼각형 구분하기!
  2. if else 조건문을 압축해서 한 줄로 표현했다.
    • print(['a','b','c','d'][@])라고 할 때
    • @에 들어가는게 False이면 0번째 요소, True이면 1번째 요소, True*n이면 n번째 요소를 출력해준다.
  3. True자리에 삼각형 결정조건을 넣었으면 더 깔끔한 코드가 되었을 것 같다.