728x90

백준 C언어 공부 2024.11.20
2577번 숫자의 개수

1. 문제
세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 
0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

예를 들어 
A = 150, B = 266, C = 427 이라면 
A × B × C = 150 × 266 × 427 = 17037300 이 되고, 
계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

2. 입력
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. 
A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

3. 출력
첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 
마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 
1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

>>>코드

#include<stdio.h>

int main(){
    int a, b, c;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &c);
    
    int result = a*b*c;
    int cnt[10] = {0};
    while (result > 0){
        cnt[result%10]++;
        result /= 10;
    }
    
    for (int i = 0; i<10; i++){
        printf("%d\n", cnt[i]);
    }
    
    return 0;
}



4. 문제링크
https://www.acmicpc.net/problem/2577

728x90
728x90

백준 C언어 공부 2024.11.19
8958번 OX퀴즈

1. 문제
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. 
O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 
문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 
예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

2. 입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 
각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 
문자열은 O와 X만으로 이루어져 있다.

3. 출력
각 테스트 케이스마다 점수를 출력한다.

>>>코드

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

int main(){
    int n;
    scanf("%d", &n);
    
    char ox[81];
    for (int i = 0; i<n; i++){
        scanf("%s", ox);
        
        char *p;
        int length = strlen(ox), score = 1, final_score = 0;
        for (p = ox; p<ox+length; p++){
            if (*p == 'O'){
                final_score += score;
                score++;
            }
            else{
                score = 1;
            }
        }
        
        printf("%d\n", final_score);
    }
    
    return 0;
}


4. 문제링크
https://www.acmicpc.net/problem/8958

728x90
728x90

20240323 백준 C언어 공부
1978번 소수 찾기

1. 문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

2. 입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 
다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

3. 출력
주어진 수들 중 소수의 개수를 출력한다.

>>>코드

# include <stdio.h>
int main(void){
    int n, x, flag, cnt = 0;
    scanf("%d", &n);
    for (int i = 0; i<n; i++){
        scanf("%d", &x);
        flag = 1;
        for (int j = 2; j<x; j++){
            if (x%j == 0){
                flag = 0;
                break;
            }
        }
        if (flag == 1 && x != 1) cnt++;
    }
    printf("%d", cnt);
    
    return 0;
}



>>>문제링크
https://www.acmicpc.net/problem/1978

728x90
728x90

20240320 백준 C언어 공부
5086번 배수와 약수

1. 문제
4 × 3 = 12이다.
이 식을 통해 다음과 같은 사실을 알 수 있다.

3은 12의 약수이고, 12는 3의 배수이다.
4도 12의 약수이고, 12는 4의 배수이다.

두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.

- 첫 번째 숫자가 두 번째 숫자의 약수이다.
- 첫 번째 숫자가 두 번째 숫자의 배수이다.
- 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니다.

2. 입력
입력은 여러 테스트 케이스로 이루어져 있다. 
각 테스트 케이스는 10,000이 넘지않는 두 자연수로 이루어져 있다. 
마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다.

3. 출력
각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 
약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.

>>>코드

# include <stdio.h>
int main(void){
    int x, y;
    while (1){
        scanf("%d %d", &x, &y);
        if (x == 0 && y == 0) break;
        else if (x%y == 0) printf("multiple\n");
        else if (y%x == 0) printf("factor\n");
        else printf("neither\n");
        
        return 0;
    }
}



>>>문제링크
https://www.acmicpc.net/problem/5086

728x90
728x90

20240317 백준 C언어 공부
2566번 최댓값

1. 문제
<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 
이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

예를 들어, 다음과 같이 81개의 수가 주어지면

  1열 2열 3열 4열 5열 6열 7열 8열 9열
1행 3 23 85 34 17 74 25 52 65
2행 10 7 39 42 88 52 14 72 63
3행 87 42 18 78 53 45 18 84 53
4행 34 28 64 85 12 16 75 36 55
5행 21 77 45 35 28 75 90 76 1
6행 25 87 65 15 28 11 37 28 74
7행 65 27 75 41 7 89 78 64 39
8행 47 47 70 45 23 65 3 41 44
9행 87 13 82 38 31 12 29 29 80

이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.

2. 입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 
주어지는 수는 100보다 작은 자연수 또는 0이다.

3. 출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 
최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

>>>코드

# include <stdio.h>
int main(void){
    int x[9][9], max = -1, row, col;
    for (int i = 0; i<9; i++){
        for (int j = 0; j<9; j++){
            scanf("%d", &x[i][j]);
            if (max < x[i][j]){
                max = x[i][j];
                row = i+1;
                col = j+1;
            }
        }
    }
    getchar();
    printf("%d\n", max);
    printf("%d %d",row, col);
    
    return 0;
}



>>>문제링크
https://www.acmicpc.net/problem/2566

728x90
728x90

20240308 백준 C언어 공부
2675번 문자열 반복

1. 문제
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 
즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. 
S에는 QR Code "alphanumeric" 문자만 들어있다.

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

2. 입력
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 
각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. 
S의 길이는 적어도 1이며, 20글자를 넘지 않는다. 

3. 출력
각 테스트 케이스에 대해 P를 출력한다.

>>>코드

#include <stdio.h>
int main(void){
    int t, r;
    char s[20];
    scanf("%d", &t);
    for (int i = 0; i < t; i++){
        scanf("%d %s", &r, &s);
        for (int j = 0; j < strlen(s); j++){
            for (int k = 0; k < r; k++){
                printf("%c", s[j]);
            }
        }
        printf("\n");
    }
}



>>>문제링크
https://www.acmicpc.net/problem/2675

728x90
728x90

20240307 백준 C언어 공부
2163번 초콜릿 자르기

1. 문제
정화는 N×M 크기의 초콜릿을 하나 가지고 있다. 
초콜릿은 금이 가 있는 모양을 하고 있으며, 그 금에 의해 N×M개의 조각으로 나눠질 수 있다.

초콜릿의 크기가 너무 크다고 생각한 그녀는 초콜릿을 친구들과 나눠 먹기로 했다. 
이를 위해서 정화는 초콜릿을 계속 쪼개서 총 N×M개의 조각으로 쪼개려고 한다. 
초콜릿을 쪼갤 때에는 초콜릿 조각을 하나 들고, 적당한 위치에서 초콜릿을 쪼갠다. 
초콜릿을 쪼갤 때에는 금이 가 있는 위치에서만 쪼갤 수 있다. 
이와 같이 초콜릿을 쪼개면 초콜릿은 두 개의 조각으로 나눠지게 된다. 
이제 다시 이 중에서 초콜릿 조각을 하나 들고, 쪼개는 과정을 반복하면 된다.

초콜릿을 쪼개다보면 초콜릿이 녹을 수 있기 때문에, 정화는 가급적이면 초콜릿을 쪼개는 횟수를 최소로 하려 한다. 
초콜릿의 크기가 주어졌을 때, 
이를 1×1 크기의 초콜릿으로 쪼개기 위한 최소 쪼개기 횟수를 구하는 프로그램을 작성하시오.

2. 입력
첫째 줄에 두 정수 N, M(1 ≤ N, M ≤ 300)이 주어진다.

3. 출력
첫째 줄에 답을 출력한다.

>>>코드

#include <stdio.h>
int main(void){
    int n, m;
    scanf("%d %d", &n, &m);
    printf("%d", n*m-1);
    return 0;
}



>>>문제링크
https://www.acmicpc.net/problem/2163

728x90
728x90

20240306 백준 C언어 공부
3046번 R2

1. 문제
두 숫자 R1과 R2가 있을 때, 두 수의 평균 S는 (R1+R2)/2와 같다. 
상근이는 정인이 생일 선물로 두 숫자 R1과 R2를 주려고 한다. 
생일 파티에서 상근이는 정인이에게 이 두 숫자를 말해주고, 정인이는 이 숫자를 받아 적는다. 
그리고 나서 기쁜 마음으로 1년동안 이 숫자를 외우면서 산다.

상근이는 R1과 R2를 엄청난 고민 끝에 정했다. 
작년에는 R1과 R2를 까먹어서 아무 숫자나 정해서 주었기 때문에, 
올해는 까먹지 않기 위해서 평균 S도 같이 기억하려고 한다.

오늘은 정인이 생일이다. 
5분 후에 상근이는 생일 선물로 두 숫자 R1과 R2를 말해주어야 하지만, 안타깝게도 R2를 까먹고 말았다. 
하지만 R1과 S는 기억하고 있다!

상근이를 도와 R2가 몇 인지 구하는 프로그램을 작성하시오.

2. 입력
첫째 줄에 두 정수 R1과 S가 주어진다. 두 수는 -1000보다 크거나 같고, 1000보다 작거나 같다.

3. 출력
첫째 줄에 R2를 출력한다.

>>>코드

# include <stdio.h>
int main(void){
    int r1, s;
    scanf("%d %d", &r1, &s);
    printf("%d", s*2-r1);
}



>>>문제링크
https://www.acmicpc.net/problem/3046

728x90

+ Recent posts