본문 바로가기
AI HW study/Baekjoon

백준 10단계: 기하(직사각형과 삼각형)

by jyun13 2023. 7. 14.

27323번: 직사각형

문제

정수 A, B 가 주어진다. 세로 길이가 A cm, 가로 길이가 B cm 인 아래와 같은 직사각형의 넓이를 cm2 단위로 구하시오.

출력

세로 길이가 A cm, 가로 길이가 B cm인 직사각형의 넓이를 cm2 단위로 구하고, 단위 (cm2)를 생략하여 출력한다.

제한

  • 1 ≦ A ≦ 100.
  • 1 ≦ B ≦ 100.
  • A, B 는 정수이다.

코드

#include <stdio.h>

int main()
{
    int a, b;
    scanf("%d\n%d", &a, &b);

    printf("%d", a * b);

    return 0;
}

1085번: 직사각형에서 탈

문제

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 x, y, w, h가 주어진다.

출력

첫째 줄에 문제의 정답을 출력한다.

제한

  • 1 ≤ w, h ≤ 1,000
  • 1 ≤ x ≤ w-1
  • 1 ≤ y ≤ h-1
  • x, y, w, h는 정수

 코드

#include <stdio.h>
#define min(x, y) (x) < (y) ? (x) : (y)

int main()
{
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);

    int x = c - a;
    int y = d - b;

    int ans = min(min(a, b), min(x, y));

    printf("%d", ans);

    return 0;
}

3009번: 네 번째 

문제

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

입력

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

출력

직사각형의 네 번째 점의 좌표를 출력한다.

코드

#include <stdio.h>

int a[1000], b[1000];
int x, y;

int main()
{
    for (int i = 0; i < 3; i++) {
        scanf("%d %d", &a[i], &b[i]);
    }

    if (a[0] == a[1]) x = a[2];
    else if (a[1] == a[2]) x = a[0];
    else if (a[0] == a[2]) x = a[1];
        
    if (b[0] == b[1]) y = b[2];
    else if (b[1] == b[2]) y = b[0];
    else if (b[0] == b[2]) y = b[1];

    printf("%d %d", x, y);

    return 0;
}

9063번: 대지

입력

첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다. 

출력

첫째 줄에 N 개의 점을 둘러싸는 최소 크기의 직사각형의 넓이를 출력하시오. 

코드

#include <stdio.h>

int A[100000], B[100000];

int main() {

int n;
int maxA = A[0];
int minA = A[0];
int maxB = B[0];
int minB = B[0];
scanf("%d", &n);

for (int i = 1; i < n; i++) {

scanf("%d %d", &A[i], &B[i]);

if (A[i] > maxA) maxA = A[i];
if (A[i] < minA) minA = A[i];

}

for (int i = 1; i < n; i++) {

if (B[i] > maxB) maxB = B[i];
if (B[i] < minB) minB = B[i];

}




int ans = (maxA - minA) * (maxB - minB);

printf("%d %d\n", maxA, minA);

printf("%d", ans);

return 0;
}

 

>> 위의 코드를 실행하였을 때 minA와 minB가 모두 0이 나옴 > 이유 ? 

 

정답 코드

#include <stdio.h>

int main()
{
    int n, x, y;
    scanf("%d", &n);
    int maxx = -10000, minx = 10000; // 각 좌표의 범위 끝 값
    int maxy = -10000, miny = 10000; // x, y의 최대, 최소 값을 위해 두 개 선언
    for (int i = 0; i < n; i++)
    {
        scanf("%d %d", &x, &y);
        if (x >= maxx) maxx = x;
        if (x < minx) minx = x;
        if (y >= maxy) maxy = y;
        if (y < miny) miny = y;
    }
    printf("%d", (maxx - minx) * (maxy - miny));

    return 0;
}

10101번: 삼각형 외우기

문제

창영이는 삼각형의 종류를 잘 구분하지 못한다. 따라서 프로그램을 이용해 이를 외우려고 한다.

삼각형의 세 각을 입력받은 다음, 

  • 세 각의 크기가 모두 60이면, Equilateral
  • 세 각의 합이 180이고, 두 각이 같은 경우에는 Isosceles
  • 세 각의 합이 180이고, 같은 각이 없는 경우에는 Scalene
  • 세 각의 합이 180이 아닌 경우에는 Error

를 출력하는 프로그램을 작성하시오.

입력

총 3개의 줄에 걸쳐 삼각형의 각의 크기가 주어진다. 모든 정수는 0보다 크고, 180보다 작다.

출력

문제의 설명에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력한다.

코드

#include <stdio.h>


int main() {
int A, B, C;

scanf("%d\n%d\n%d", &A, &B, &C);

if (A + B + C == 180) {

if (A == B && B == C && C==60) { //A == B == C 는 안된다!
printf("Equilateral");
}
else if (A == B) printf("Isosceles");
else if (B == C) printf("Isosceles");
else if (A == C) printf("Isosceles");
else if (A != B != C) printf("Scalene");

}

else printf("Error");

return 0;
}

 

5073번: 삼각형과 세 변 

문제

삼각형의 세 변의 길이가 주어질 때 변의 길이에 따라 다음과 같이 정의한다.

  • Equilateral :  세 변의 길이가 모두 같은 경우
  • Isosceles : 두 변의 길이만 같은 경우
  • Scalene : 세 변의 길이가 모두 다른 경우

단 주어진 세 변의 길이가 삼각형의 조건을 만족하지 못하는 경우에는 "Invalid" 를 출력한다. 예를 들어 6, 3, 2가 이 경우에 해당한다. 가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않으면 삼각형의 조건을 만족하지 못한다.

세 변의 길이가 주어질 때 위 정의에 따른 결과를 출력하시오.

입력

각 줄에는 1,000을 넘지 않는 양의 정수 3개가 입력된다. 마지막 줄은 0 0 0이며 이 줄은 계산하지 않는다.

 

출력

각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.

코드 

#include <stdio.h>
#define max(x, y) (x) > (y) ? (x) : (y)
int main(void) {
int A, B, C;
while (1) {
scanf("%d %d %d", &A, &B, &C);
int max = max(max(A, B), C);

if (A == 0 && B == 0 && C == 0) break;

if (((A + B + C) - max) > max) {
if (A == B && B == C && C == A) printf("Equilateral\n");
else if ((A == C) || (B == C) || (B == A)) printf("Isosceles\n");
else printf("Scalene\n");
}
else printf("Invalid\n");
}
return 0;
}

 

14215번: 세 막

문제

영선이는 길이가 a, b, c인 세 막대를 가지고 있고, 각 막대의 길이를 마음대로 줄일 수 있다.

영선이는 세 막대를 이용해서 아래 조건을 만족하는 삼각형을 만들려고 한다.

  • 각 막대의 길이는 양의 정수이다
  • 세 막대를 이용해서 넓이가 양수인 삼각형을 만들 수 있어야 한다.
  • 삼각형의 둘레를 최대로 해야 한다.

a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오. 

입력

첫째 줄에 a, b, c (1 ≤ a, b, c ≤ 100)가 주어진다.

출력

첫째 줄에 만들 수 있는 가장 큰 삼각형의 둘레를 출력한다.

코드

#include <stdio.h>

int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    if (a >= b + c) {
        printf("%d", 2 * (b + c) - 1);
    }

    else if (b >= a + c) {
        printf("%d", 2 * (a + c) - 1);
    }

    else if (c >= a + b) {
        printf("%d", 2 * (a + b) - 1);
    }

    else printf("%d", a + b + c);

    return 0;
}

'AI HW study > Baekjoon' 카테고리의 다른 글

백준 5단계 문자열 개념 정리  (0) 2023.07.15
백준 4단계: 1차원 배열  (0) 2023.07.14
백준 3단계-2: 반복문  (0) 2023.07.14
백준 1단계  (0) 2023.07.11
백준 3단계-1: 반복문  (0) 2023.07.11