0422 스키마에듀 수업 (백준)

2023. 4. 20. 22:20스키마에듀 c언어 수업

728x90

https://www.acmicpc.net/problem/2669

 

2669번: 직사각형 네개의 합집합의 면적 구하기

평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으

www.acmicpc.net

https://www.acmicpc.net/problem/27961

#include <stdio.h>

int main(void) {
  int x, y, l, h;
  int k, i, j;
  int sum=0;

  int map[101][101]={0,};

 for(k=0;k<4;k++){

  scanf("%d %d %d %d", &x, &y, &l, &h);

 for(i=x;i<l;i++){
    for(j=y;j<h;j++){
           map[j][i] = 1;
    }
 }
}

for(i=0;i<101;i++){
   for(j=0;j<101;j++){
      if(map[i][j] == 1){
        sum++;
      }
    }
  }

printf("%d", sum);


}

 

 

27961번: 고양이는 많을수록 좋다

올바른 행동 순서가 될 수 있는 하나의 예시는 아래와 같으며, $4$번보다 더 작은 행동 횟수로 $6$마리의 고양이를 마도카의 집에 들이는 것은 불가능하다. 초기 상태($0$마리) $\rightarrow$ 생성

www.acmicpc.net

#include <stdio.h>

int main() {
    long long n;
    scanf("%lld", &n);  // 입력 받은 숫자 n을 저장

    long long cnt = 0;  // 고양이가 있는 수
    int ans = 0;  // 사용한 마법 횟수

    while (cnt < n) {
        ans++;  // 마법을 사용한 횟수 증가
        if (cnt == 0) {
            cnt = 1;  // 고양이가 없으면 1마리 생성
        } else {
            cnt *= 2;  // 현재 고양이 수의 2배 만큼 복제
        }
    }

    printf("%d\n", ans);  // 사용한 마법 횟수 출력
    return 0;
}

 

https://www.acmicpc.net/problem/27960

 

27960번: 사격 내기

A, B, C는 올해에도 예비군 훈련을 받으러 간다. 이번 예비군 훈련 과정 중에는 영점 사격이 있으며, 10개의 과녁 각각에 점수를 매겨 맞춘 과녁 점수의 총합을 측정한다. 과녁을 맞혔을 때, 과녁별

www.acmicpc.net

#include <stdio.h>

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    
    int c = (a^b); // C 점수 계산
    
    printf("%d\n", c);
    return 0;
}

https://www.acmicpc.net/problem/2529

10진수를 2진수로 바꿔서 생각

1점 / 2점 / 4점 / 8점 / 16점/ 32점 / 64점 / 128점 / 256점 / 512점

512 / 256 / 128 / 64 / 32 / 16 / 8 / 4 / 2/ 1

 

55 =        1    1     0    1    1    1   A가 맞춘 과녁-  32점, 16점, 4점, 2점, 1점

73 =  1    0    0    1    0    0    1   B가 맞춘 과녁-  64점, 8점, 1점

      64 / 32 /16 / 8 / 4  / 2  / 1

 

xor연산

1   1    1   1   1  0   -> A와 B 중 둘 중 한 명만 맞힌 표적 ->10진수로 바꾸면 => C의 점수

 

 

2529번: 부등호

여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력

www.acmicpc.net

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 10

int n;
char paren[MAX_SIZE];
int visited[MAX_SIZE] = {0};
char result_max[MAX_SIZE + 1] = {'\0'};
char result_min[MAX_SIZE + 1] = {'\0'};

void dfs(int cnt, char num[MAX_SIZE + 1]) {
    if (strlen(num) == n + 1) {
        if (strcmp(result_max, num) < 0)
            strcpy(result_max, num);
        if (strcmp(result_min, num) > 0 || strlen(result_min) == 0)
            strcpy(result_min, num);
        return;
    }

    for (int i = 0; i < 10; i++) {
        if (visited[i] == 1)
            continue;

        if (cnt == 0 || (paren[cnt-1] == '<' && num[cnt-1] < i + '0') ||
            (paren[cnt-1] == '>' && num[cnt-1] > i + '0')) {
            visited[i] = 1;
            num[cnt] = i + '0';
            dfs(cnt + 1, num);
            visited[i] = 0;
            num[cnt] = '\0';
        }
    }
}

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf(" %c", &paren[i]);
    }
    char num[MAX_SIZE + 1] = {'\0'};
    dfs(0, num);
    printf("%s\n%s\n", result_max, result_min);
    return 0;
}

 

https://www.acmicpc.net/problem/11729