
안녕하세요 !
오늘은 백준 - 삼각형과 세 변 문제를 가지고 왔습니다.

문제를 해결한 방법을 간략히 정리해보겠습니다.
- 입력을 받고 종료 조건인지 판단한다.
- 삼각형의 조건을 만족하는지 검사하고 삼각형이 아니라면 출력한다.
- 세 변의 길이가 모두 같은지 검사하고 출력한다.
- 세 변의 길이가 모두 다른 경우인지 검사하고 출력한다.
- 두 변의 길이만 같은 경우인지 검사하고 출력한다.
arr = [] while 1: l = list(map(int, sys.stdin.readline().strip().split())) if l[0] == 0 and l[1] == 0 and l[2] == 0: break
max_length = max(l) arr1 = l[:] # 앝은 복사 arr1.remove(max_length) if sum(arr1) <= max_length: print("Invalid")
elif l[0] == l[1] and l[1] == l[2] and l[0] == l[2]: print("Equilateral")
elif l[0] != l[1] and l[1] != l[2] and l[0] != l[2]: print("Scalene")
세 변의 길이가 모두 같거나 아니면 모두 다른 경우가 아닌 경우가 두 변의 길이만 같은 경우입니다.
else: print("Isosceles")
문제를 풀다가 다음과 같은 오류가 발생했습니다.

문제가 발생했던 곳은 바로 아래와 같습니다.
arr1 = l arr1.remove(max_length)
arr1 = l 을 하게 되면 깊은 복사가 되어서 arr1과 l이 같은 리스트를 가르키게 되고 arr1에서 요소를 지우면 l에서도 지워집니다.
요소가 3개였던 리스트에서 요소를 하나 지우게 되니 l[2]로 접근이 불가했던 것입니다.
아래와 같이 앝은 복사를 사용했더니 오류가 발생하지 않았습니다.
arr1 = ㅣ[:] arr1.remove(max_length)
import sys arr = [] while 1: l = list(map(int, sys.stdin.readline().strip().split())) if l[0] == 0 and l[1] == 0 and l[2] == 0: break max_length = max(l) arr1 = l[:] arr1.remove(max_length) if sum(arr1) <= max_length: print("Invalid") elif l[0] == l[1] and l[1] == l[2] and l[0] == l[2]: print("Equilateral") elif l[0] != l[1] and l[1] != l[2] and l[0] != l[2]: print("Scalene") else: print("Isosceles")