본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #46 삼각형 판별

by Mr.Algo 2024. 4. 10.
728x90
반응형

파이썬 실습창을 열 수 있습니다.실습창 열기

다양함

 

 

1. 삼각형 판별

삼각형이란 '한 평면상에 있고, 일직선 상에 없는 3개의 점을 2개씩 쌍으로 하여 선분으로 연결했을 때 만들어 지는 도형을 일컫는 말입니다. 이러한 삼각형에는 3개의 변과 3개의 내각이 있게 되는데 이것을 삼각형의 6요소라고 하며, 이것에 의하여 모양과 크기가 결정됩니다. 삼각형은 가장 기본적인 평면도형이므로 평면기하학의 거의 모든 성질을 해명할 때 삼각형의 성질을 사용하게 됩니다.

 

삼각형의 주요한 성질은 ‘2변의 길이의 합이 다른 한 변의 길이 보다 크다.’는 것입니다. 이 성질을 만족하지 못하면 삼각형이 아닙니다. 삼각형인 경우, 변의 길이에 따른 삼각형의 종류는 다음과 같습니다.

  • 정삼각형 : 3 변의 길이가 같은 삼각형 (regular triangle, 레궐러 트라이앵글)
  • 이등변삼각형: 2 변의 길이가 같은 삼각형 (isosceles triangle, 아이사설리즈)
  • 부등변삼각형: 3 변의 길이가 서로 다른 삼각형 (scalene triangle, 스케일린)

3변의 길이를 입력받아서 다음의 4가지로 삼각형을 판별하여 보세요.

'삼각형 아님', '정삼각형', '이등변삼각형', '부등변삼각형'

 

입력

3 변의 길이가 같은 줄에 입력됩니다.

공백(space)으로 구분되어 있으며 실수입니다.  

input() 함수를 사용하세요.

 

출력

삼각형을 판별합니다.

답은  '삼각형 아님', '정삼각형', '이등변삼각형', '부등변삼각형' 중의 한가지입니다.

 

입력의 예1

3.0 4.0 5.0

 

출력의 예1

부등변삼각형

 

입력의 예2

3.0 4.0 9.0

 

출력의 예2

삼각형 아님

 

※ [참고] map()  함수

map()은 반복 가능한(iterable) 자료를 순차적으로 함수에 적용합니다.

(Make an iterator that computes the function using arguments from each of the iterables.)

 

번호 프로그램 출력과 설명
1 data='3.0 4.0 5.0'
a=data.split()
print(a)
['3.0', '4.0', '5.0']

공백(space)으로 분할하여 리스트를 만듭니다.
각각의 item은 str(스트링)입니다.
산술연산에 사용할 수 없습니다.
 
2 data='3.0 4.0 5.0'
a,b,c=data.split()
s=float(a)+float(b)+float(c)
print(s)
12.0

합을 구하려면 스트링인 item 각각을 실수로 변환하여 사용해야합니다.
3 data='3.0 4.0 5.0'
a=map(float,data.split())
print(a)
<map object at 0x00~~~~~>
map() 함수는 item 각각에 대하여 float를 적용합니다.(위의 3번 줄과 같은 역할)
적용한 결과는 map object에 모아두기 때문에 눈으로 볼 수 없습니다.
4 data='3.0 4.0 5.0'
a=map(float,data.split())
print(sum(a))
print(max(a))
12.0
ValueError

map object는 sum(), max(), min()에 대하여 1회 적용할 수 있습니다.
그래서 sum()은 바르게 계산되지만 max()는 에러가 발생되었습니다.


5 data='3.0 4.0 5.0'
a=list(map(float,data.split()))
print(sum(a))
print(max(a))
print(min(a))
12.0
5.0
3.0

map object를 list object 등으로 변환하면 여러번 사용할 수 있습니다.

 

 

2. 문제 해결

'삼각형 판별' 문제해결에 도전합시다.

프로그램의 얼개를 생각합니다.

 

코딩합시다.

tri=['삼각형 아님','정삼각형','이등변삼각형','부등변삼각형']
data=input()                       # data 입력, 예) 3.0 4.0 5.0
a,b,c=map(float,data.split())      # data를 할하여 실수로 바꾸고 unpacking함 
x=0                                # 삼각형이 아니라고 가정
if a+b>c and b+c>a and c+a>b:      # 삼각형인가 판별, 2변의 합이 나머지 한 변보다 큰가?
    if a==b==c:x=1                 # 변이 같은가?
    elif a==b or a==c or b==c:x=2  # 2변이 같은가?
    else:x=3                       # 모두 아니면  
print(tri[x])

'''
일번적인 코딩입니다.
'''

 

3. 개선된 코딩

문제해결 방법(algorithm design)이 여러가지 있을 수 있습니다.

또한 같은 방법이라도 여러가지로 코딩할 수 있습니다. 

코딩 기술(coding technique)입니다.

다른 방법으로 코딩한 예입니다.

tri=['삼각형 아님','정삼각형','이등변삼각형','부등변삼각형']
data='3.0 4.0 5.0'
t=list(map(float,data.split()))
x=0
if sum(t)-max(t)>max(t):    # sum(t)/2 > max(t): 이 방법도 가능
    x=len(set(t))
print(tri[x])  

'''
5번 줄: 
'두 변의 합이 나머지 한 변의 길이 보다 크다'는 것은
'최대값보다 나머지(전체합에서 최대값을 뺀 값)가 크다'는 것과 같습니다.
또한 '전체 합의 반이 최대값보다 크다'와 같습니다.

6번 줄:
집합은 중복을 제거합니다.
중복을 제거하고 3개가 남으면 부등변, 2개 남으면 이등변, 하나 남으면 정삼각형입니다.

프로그램이 짧아졌습니다.
'''

 

수고하셨습니다.

방법도 여러가지, 코딩도 여러가지가 있을 수 있습니다.

상황에 적절한 방법을 사용합시다.

 

오늘 끝.

728x90
반응형