728x90
반응형

직각삼각형 

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

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
32
33
34
 
#include <stdio.h>
#include <math.h>
int main()
{
    int a,b,c;
    while(1){
        int max,l,m;
        
        scanf("%d %d %d",&a,&b,&c);
        if(a==0&&b==0&&c==0break;
        if(a>b&&a>c){
            max = a;
            l=b; m=c;
        } 
        else if(b>a&&b>c){
            max = b;
            l=a; m=c;
        } 
        else{
            max = c;
            l=a;m=b;
        } 
        
        if(pow(max,2)==pow(l,2)+pow(m,2)){
            printf("right\n");
        }else printf("wrong\n");
        
        
        
    }
    return 0;
}
 
cs

최대값은 빗변의 길이가 뭔지 확인하기 위해 찾았다.

 

반응형

'백준 단계별로 풀어보기 > 기하 1' 카테고리의 다른 글

백준 1004 어린 왕자  (1) 2022.10.31
백준 2477 참외밭  (0) 2022.10.12
백준 3009 네 번째 점  (0) 2022.10.10
백준 1085 직사각형에서 탈출  (0) 2022.10.10
728x90
반응형

네 번째 점 

 

문제

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

입력

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

출력

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include <stdio.h>
 
int main()
{
    int x1,y1,x2,y2,x3,y3;
    scanf("%d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3);
    int x4,y4;
    if(x1==x2) x4=x3;
    else if(x1==x3) x4=x2;
    else x4=x1;
    
    if(y1==y2) y4=y3;
    else if(y1==y3) y4=y2;
    else y4=y1;
    
    
    
    printf("%d %d",x4,y4);
    return 0;
}
 
cs

 

축에 평행한 직사각형이고 4번째 점을 찾기만 하면 된다

축에 평행한 직사각형이면 x,y좌표가 총 2개씩 나올 것이다.

즉, 입력된 3개의 좌표 중 똑같지 않은 x,y값이 4번째 좌표의 x,y값일 것이다.

반응형

'백준 단계별로 풀어보기 > 기하 1' 카테고리의 다른 글

백준 1004 어린 왕자  (1) 2022.10.31
백준 2477 참외밭  (0) 2022.10.12
백준 4153 직각삼각형  (0) 2022.10.10
백준 1085 직사각형에서 탈출  (0) 2022.10.10
728x90
반응형

직사각형에서 탈출 

문제

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

입력

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

출력

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#include <stdio.h>
 
int main()
{
    int x,y,w,h;
    scanf("%d %d %d %d",&x,&y,&w,&h);
    
    
    int min;
    min = y;
    if(min>h-y) min = h-y;
    if(min>x) min = x;
    if(min>w-x) min = w-x;
    printf("%d",min);
    return 0;
}
 
cs
반응형

'백준 단계별로 풀어보기 > 기하 1' 카테고리의 다른 글

백준 1004 어린 왕자  (1) 2022.10.31
백준 2477 참외밭  (0) 2022.10.12
백준 4153 직각삼각형  (0) 2022.10.10
백준 3009 네 번째 점  (0) 2022.10.10
728x90
반응형

수 정렬하기 2 

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

 

시간 NlogN 인 정렬

 

Merge Sort

Heap Sort

Quick Sort

 

중 Merge Sort 를 배껴와서 풀었다.

출처 : https://airsbigdata.tistory.com/167

 

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
#include <stdio.h>
int sorted[1000000];
 
void merge(int list[], int left, int mid, int right){
  int i, j, k, l;
  i = left;
  j = mid+1;
  k = left;
 
  /* 분할 정렬된 list의 합병 */
  while(i<=mid && j<=right){
    if(list[i]<=list[j])
      sorted[k++= list[i++];
    else
      sorted[k++= list[j++];
  }
 
  // 남아 있는 값들을 일괄 복사
  if(i>mid){
    for(l=j; l<=right; l++)
      sorted[k++= list[l];
  }
  // 남아 있는 값들을 일괄 복사
  else{
    for(l=i; l<=mid; l++)
      sorted[k++= list[l];
  }
 
  // 배열 sorted[](임시 배열)의 리스트를 배열 list[]로 재복사
  for(l=left; l<=right; l++){
    list[l] = sorted[l];
  }
}
 
// 합병 정렬
void merge_sort(int list[], int left, int right){
  int mid;
 
  if(left<right){
    mid = (left+right)/2// 중간 위치를 계산하여 리스트를 균등 분할 -분할(Divide)
    merge_sort(list, left, mid); // 앞쪽 부분 리스트 정렬 -정복(Conquer)
    merge_sort(list, mid+1, right); // 뒤쪽 부분 리스트 정렬 -정복(Conquer)
    merge(list, left, mid, right); // 정렬된 2개의 부분 배열을 합병하는 과정 -결합(Combine)
  }
}
int main()
{
    int N;
    scanf("%d",&N);
    int array[N];
    for(int i=0; i<N; i++){
        scanf("%d",&array[i]);
    }
    /*
    for(int i=0; i<N; i++){
        printf("%d\n",array[i]);
    }
    */
    merge_sort(array,0,N-1);
     for(int i=0; i<N; i++){
        printf("%d\n",array[i]);
    }
    return 0;
}
 
cs

Merge Sort 코드 부분만 그대로 긁어왔다.

 

반응형

'백준 단계별로 풀어보기 > 정렬' 카테고리의 다른 글

C언어 qsort  (0) 2022.11.05
백준 11650 좌표 정렬하기(실패)  (0) 2022.10.22
백준 1427 소트인사이드  (1) 2022.10.11
백준 25305 커트라인  (1) 2022.10.11
백준 2750 수 정렬하기  (0) 2022.09.18

+ Recent posts