일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- greedy
- 코드엔진
- CSS
- implement
- 그리디
- 정리
- HTML
- Implemention
- 백준
- 파이썬
- C 언어
- 문제풀이
- 꾸준히
- 문자열
- 친절한 설명
- 10807
- 입문
- C
- 설명
- Baekjoon
- Python
- 심화1
- Beakjoon
- 구현
- c언어
- 알고리즘
- 초보
- 10926
- C Programming
- VS
- Today
- Total
안경잡이 구루루
백준 5073 (삼각형과 세 변) [Python/파이썬] 본문
https://www.acmicpc.net/problem/5073
나:
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 로 각 경우에 따라 따져서 출력하도록 구현했다.
'파이썬(Python) > 문제풀이(백준,BaekJoon)' 카테고리의 다른 글
백준 10162 (전자레인지) [Python/파이썬] [Greddy/그리디] (0) | 2023.09.16 |
---|---|
백준 5585 (거스름돈) [Python/파이썬] [Greedy/그리디] (0) | 2023.09.16 |
백준 10101 (삼각형 외우기) [Python/파이썬] (0) | 2023.09.03 |
백준 9063 (대지) [Python/파이썬] (0) | 2023.09.02 |
백준 2720 (세탁소 사장 동혁) [Python/파이썬] (0) | 2023.09.01 |