5단계.
위치 N 개가 주어질 때에, 임씨에게 돌아갈 대지의 넓이를 계산하는 프로그램을 작성하시오. 단, 옥구슬의 위치는 2 차원 정수 좌표로 주어지고 옥구슬은 같은 위치에 여러 개가 발견될 수도 있으며, x 축의 양의방향을 동쪽, y 축의 양의방향을 북쪽이라고 가정한다.
예를 들어 위와 같이 (2, 1), (3, 2), (5, 2), (3, 4) 네 점에서 옥구슬을 발견하였다면, 임씨에게 돌아갈 대지는 (2, 1), (5, 1), (2, 4), (5, 4)를 네 꼭짓점으로 하는 직사각형이며, 넓이는 (5 - 2) × (4 - 1) = 9 가 된다.
첫째 줄에 N 개의 점을 둘러싸는 최소 크기의 직사각형의 넓이를 출력하시오.
답: n = int(input())
X, Y = [], []
for i in range(n):
x, y = map(int, input().split())
X.append(x)
Y.append(y)
print((max(X) - min(X)) * (max(Y) - min(Y)))
먼저 n를 입력받는다 이후 X와 Y 배열을 선언한다. 이후 n만큼 반복문을 돌린다.
이후 2차원 평면의 점을 받아준다 (x 그리고 y) 받았으면 X와 Y에 넣어준다.
최소 크기의 직사각형 크기이니 최댓값에서 최솟값을 뺀 X와 Y을 곱해주면 된다.
6단계.
삼각형의 세 각을 입력받은 다음,
세 각의 크기가 모두 60이면, Equilateral
세 각의 합이 180이고, 두 각이 같은 경우에는 Isosceles
세 각의 합이 180이고, 같은 각이 없는 경우에는 Scalene
세 각의 합이 180이 아닌 경우에는 Error
를 출력하는 프로그램을 작성하시오.
답: a=int(input())
b=int(input())
c=int(input())
if (a+b+c==180):
if (a==60 and b==60 and c==60):
print("Equilateral")
elif (a==b or b==c or c==a):
print("Isosceles")
elif (a!=b and b!=c):
print("Scalene")
else:
print("Error")
심플하다. 세 각의 합이 180이 아니면 에러를 출력해 주면 된다. 만일 180이면 문제에 있는 조건을 코드로 구현해 주면 끝이다.(각 입력은 따로따로 줄 바꿈으로 바꿔야 해서 저런 식으로 코드를 구성했다.)
7단계.
삼각형의 세 변의 길이가 주어질 때 변의 길이에 따라 다음과 같이 정의한다.
Equilateral : 세 변의 길이가 모두 같은 경우
Isosceles : 두 변의 길이만 같은 경우
Scalene : 세 변의 길이가 모두 다른 경우
단, 주어진 세 변의 길이가 삼각형의 조건을 만족하지 못하는 경우에는 "Invalid" 를 출력한다. 예를 들어 6, 3, 2가 이 경우에 해당한다.
가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않으면 삼각형의 조건을 만족하지 못한다.
세 변의 길이가 주어질 때 위 정의에 따른 결과를 출력하시오.
각 줄에는 1,000을 넘지 않는 양의 정수 3개가 입력된다. 마지막 줄은 0 0 0이며 이 줄은 계산하지 않는다.
답: while (1):
a, b, c = map(int, input().split())
if (a == b == c == 0):
break
if (sum((a, b, c)) - max((a, b, c)) <= max((a, b, c))):
print("Invalid")
elif (a == b == c):
print('Equilateral')
elif (a == b or b == c or a == c):
print("Isosceles")
else :
print("Scalene")
포인트는 "모든 조건을 만족하지 않을 때"이다. 삼각형의 조건을 만족하지 않으려면 어떻게 해야 할까?
삼각형의 모든 변의 길이의 합에서 최대 길이를 뺀 값이 최대 길이보다 작거나 같으면 삼각형이 아니다. (이 부분은 구글링을 이용해서 삼각형의 변의 길이 조건으로 알아낼 수 있다.)
나머지 부분은 6단계랑 비슷하다.
8단계.
영선이는 길이가 a, b, c인 세 막대를 가지고 있고, 각 막대의 길이를 마음대로 줄일 수 있다.
영선이는 세 막대를 이용해서 아래 조건을 만족하는 삼각형을 만들려고 한다.
각 막대의 길이는 양의 정수이다 세 막대를 이용해서 넓이가 양수인 삼각형을 만들 수 있어야 한다. 삼각형의 둘레를 최대로 해야 한다.
a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오.
첫째 줄에 a, b, c (1 ≤ a, b, c ≤ 100)가 주어진다.
답: arr = sorted(list(map(int, input().split())))
if (arr[0] + arr[1] > arr[2]):
print(sum(arr))
else:
print((arr[0] + arr[1]) * 2 - 1)
여기서 sorted는 "오름차순"이다.
입력받은 모든 정수 (3개)가 오름차순으로 입력이 되었을 것이다. (예를 들어 1 , 2 , 3)
먼저 길이를 최대로 써서 삼각형을 사용할 수 있는지 확인한다. 어차피 오름차순이라 인덱스가 커질수록 정수는 커질 것이다. 그러니 배열의 0번과 1번을 합친 것이 배열의 2번보다 크다면? 그냥 배열의 모든 수를 더하면 된다. (문제는 둘레를 구하는 것임을 기억하자.)
근데 배열의 0번과 1번을 합친 것이 배열의 2번보다 크지 않다면?
그러면 배열 2번은 버려야 한다. 어차피 못 쓰기 때문이다.
배열 0번과 배열 1을 더해준다. 이후 2를 곱해주고 1을 빼준다. 이래야 짧은 변으로 삼각형을 만들어 줄 수 있다.
(가장 짧은 변의 합을 2배 함으로써 가장 크게 만들어준다. 이후 비율을 조절하기 위해 1을 빼준다)
결론
삼각형 문제는 "삼각형의 조건"을 알면 쉽게 풀린다!
'백준 (코테)' 카테고리의 다른 글
13. [11단계] 제목: 시간 복잡도 (3~7챕터) (0) | 2024.08.23 |
---|---|
12. [11단계] 제목: 시간 복잡도 (1~2챕터) (0) | 2024.08.22 |
10. [10단계] 제목: 기하: 직사각형과 삼각형 (1~4챕터) (0) | 2024.08.20 |
9. [9단계] 제목: 약수, 배수와 소수 단계 (0) | 2024.08.17 |
8. [8단계] 제목: 일반 수학 1 (0) | 2024.08.16 |