[python] 백준 5073번

도덩이의 개발 일지·2024년 9월 1일

백준

목록 보기
56/131
post-thumbnail

안녕하세요 !

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


문제 설명


해결 방법

문제를 해결한 방법을 간략히 정리해보겠습니다.

  1. 입력을 받고 종료 조건인지 판단한다.
  2. 삼각형의 조건을 만족하는지 검사하고 삼각형이 아니라면 출력한다.
  3. 세 변의 길이가 모두 같은지 검사하고 출력한다.
  4. 세 변의 길이가 모두 다른 경우인지 검사하고 출력한다.
  5. 두 변의 길이만 같은 경우인지 검사하고 출력한다.

  1. 입력을 받고 종료 조건인지 판단한다. 종료 조건은 모든 변의 길이가 0일 때 입니다.
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

  1. 삼각형의 조건을 만족하는지 검사하고 삼각형이 아니라면 출력한다.
max_length = max(l)
    arr1 = l[:] # 앝은 복사
    arr1.remove(max_length)
    if sum(arr1) <= max_length:
        print("Invalid")

  1. 세 변의 길이가 모두 같은지 검사하고 출력한다.
elif l[0] == l[1] and l[1] == l[2] and l[0] == l[2]:
    print("Equilateral")

  1. 세 변의 길이가 모두 다른 경우인지 검사하고 출력한다.
elif l[0] != l[1] and l[1] != l[2] and l[0] != l[2]:
    print("Scalene")

  1. 두 변의 길이만 같은 경우인지 검사하고 출력한다.

세 변의 길이가 모두 같거나 아니면 모두 다른 경우가 아닌 경우가 두 변의 길이만 같은 경우입니다.

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")
profile
말하는 감자에서 개발자로 ( ´͈ ᵕ `͈ )◞♡

0개의 댓글