[Layer7] C언어 3차시 과제

cette·2025년 4월 9일
0




beakjoon

10807 개수 세기

총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.

#include <stdio.h>
int main() {
    int n, v;
    int count=0;
    int num[100];
    scanf("%d",&n);
    for (int i=0;i<n;i++){
        scanf("%d",&num[i]);
    }
    scanf("%d",&v);
    for (int j=0;j<n;j++){
        if(num[j] == v){
           count++;
        }
    }
    printf("%d",count);
    return 0;
}

10818 최소, 최대

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

#include <stdio.h>
int main() {
    int small, big;
    int n;
    int num[1000000]; 
    scanf("%d",&n);
    for (int i=0;i<n;i++) {
        scanf("%d",&num[i]);
    }
    small=big=num[0];
    for (int i = 0;i<n;i++) {
        if (small>num[i]) {
            small=num[i];
        }
        if (big<num[i]) {
            big=num[i];
        }
    }
    printf("%d %d",small,big);
    return 0;
}

n값을 입력받아 배열을 몇번까지 입력할 지 정한다. for문을 통해 num[0]값부터 입력받는다. small이랑 big값을 num[0]번값으로 저장하고, 각각 for문에서 0번부터 배열 끝까지 돌면서 small(big)에서 if문을 통해 작은값(큰 값)을 계속해서 비교해서 저장해 출력하도록 한다.

10810 공 넣기

공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.

#include <stdio.h>
int main() {
    int N, M;
    int i, j, k;
    scanf("%d %d", &N, &M);
    int basket[101]={};
    for (int m = 0; m < M; m++) {
        scanf("%d %d %d", &i, &j, &k);
        for (int x=i; x <= j; x++) {
            basket[x]=k;
        }
    }
    for (int i = 1; i <= N; i++){
        printf("%d ",basket[i]);
    }
    return 0;
}

N이 바구니 수 M이 공을 넣는 횟수이고 공을 넣는 작업을 M번 반복합니다
i: 시작 바구니 번호 j: 끝 바구니 번호 k: 넣을 공 번호
i번부터 j번 바구니까지 반복하면서 각 바구니에 번호 k번의 공을 넣고 출력합니다.

2738 행렬 덧셈

N * M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오

#include <stdio.h>
int main() {
    int N, M;
    scanf("%d %d", &N, &M);
    int A[N][M], B[N][M], C[N][M];
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            scanf("%d", &A[i][j]);
        }
    }
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            scanf("%d", &B[i][j]);
            C[i][j] = A[i][j] + B[i][j];
        }
    }
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }
    return 0;
}

첫번째 for문을 통해 행렬 A 입력한다. 둘째 for문을 통해 행렬 B 입력을 한다. 동
시에 행렬 A와의 합을 계산한다. 이후에 그 값을 새로운 C에 저장해서 출력한다.

10798 세로읽기

칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.

#include <stdio.h>
#include <string.h>
int main() {
    char words[5][16] = {0};
    int max = 0;
    for (int i = 0; i < 5; i++) {
        scanf("%s", words[i]);
        int length = strlen(words[i]);
        if (length > max) {
          max = length;
        }
    }
    for (int j = 0; j < max; j++) {
        for (int i = 0; i < 5; i++) {
            if (words[i][j] != '\0') {
                printf("%c", words[i][j]);
            }
        }
    }
    printf("\n");
    return 0;
}

2566 최댓값

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

code up

1093 : 이상한 출석 번호 부르기1

출석 번호를 n번 무작위로 불렀을 때, 각 번호(1 ~ 23)가 불린 횟수를 각각 출력해보자.

#include <stdio.h>
int main() {
    int n, i, t;
    int a[24]= {0};
    scanf("%d", &n); 
    for(i=1;i<=n;i++) {
        scanf("%d", &t);
        a[t]++;
        }
    for(i=1; i<=23; i++){
        printf("%d ", a[i]); 
    }
    return 0;
}

1094 : 이상한 출석 번호 부르기2

출석 번호를 n번 무작위로 불렀을 때, 부른 번호를 거꾸로 출력해 보자.

#include <stdio.h>
int main() {
    int n,i;
    int a[10000]={};
    scanf("%d", &n);
    for(i=0; i<n; i++) 
       scanf("%d", &a[i]); 
    for(i=n-1; i>=0; i--)
       printf("%d ", a[i]);
    return 0;
}

1095 : 이상한 출석 번호 부르기3

출석 번호를 n번 무작위로 불렀을 때, 가장 빠른 번호를 출력해 보자.

#include <stdio.h>
int main() {
    int small;
    int n;
    int num[1000000]; 
    scanf("%d",&n);
    for (int i=0;i<n;i++) {
        scanf("%d",&num[i]);
    }
    small=num[0];
    for (int i = 0;i<n;i++) {
        if (small>num[i]) {
            small=num[i];
        }
    }
    printf("%d",small);
    return 0;
}

1460 : 2차원 배열 순서대로 채우기 1-1

입력이 n인 경우의 2차원 배열을 출력해보자.

#include <stdio.h>
int main() {
    int n;
    int num=1;
    scanf("%d",&n);
    for (int i=0;i<n;i++){
        for (int j=0; j<n;j++){
            printf("%d ",num);
            num++;
        }
        printf("\n");
    }
    return 0;
}

n의 값을 입력받는다. 행과 열 둘다 n이여야 하기 때문에 이중for문을 사용한다.
num을 사용해서 1부터 for문이 바뀔 때 마다 num에 1을 더해줘서 1부터 순서대로 출력한다.

1466 : 2차원 배열 순서대로 채우기 1-7

입력이 n m인 경우의 2차원 배열을 출력해보자.

#include <stdio.h>
int main() {
    int n, m;
    scanf("%d %d", &n, &m); 
    int val = n * m;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d ", val - (j* n + i));
        }
        printf("\n");
    }
    return 0;
}

1470 : 2차원 배열 지그재그 채우기 2-3

입력이 n인 경우의 2차원 배열을 출력해보자.

#include <stdio.h>
int main() {
    int n;
    scanf("%d", &n);
    int arr[100][100];
    int num = 1;
    for (int col = 0; col < n; col++) {
        if (col % 2 == 0) {
            for (int row = 0; row < n; row++) {
                arr[row][col] = num++;
            }
        } else {
            for (int row = n - 1; row >= 0; row--) {
                arr[row][col] = num++;
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

1532 : 함수로 정수(long long int) -2147483649 리턴하기

–2147483649 을 출력하시오.

long long int f() {
    return -2147483649LL;
}

1535 : 함수로 가장 큰 값 위치 리턴하기

배열에서 가장 큰 값이 처음 나타나는 위치를 출력하시오.

int f(){
    int max =0;
    for(int i =0;i<n;i++){
        if (d[i] > d[max]){
            max=i;
        }
    }
    return max+1;
}

max값을 초기화 해준다. n값만큼 for문을 돌면서 d의 인덱스 0번(i 값)부터 max값이랑 비교해서 if max값보다 큰 인덱스 값이 있으면 그 값을 max에 저장하고
max값은 배열 0부터 시작하는 값이니깐 +1해서 return한다.

1538 : 함수로 odd 또는 even 출력하기

odd 또는 even 을 출력하시오.

void f(int k){
    printf("%s\n", k%2==0?"even":"odd");
}

1548 : 함수로 학점 리턴하기

다음과 같이, 점수를 입력 받아 학점을 출력하시오.
90 점 이상 ~ 100점 이하 : A
80 점 이상 ~ 90점 미만 : B
70 점 이상 ~ 80점 미만 : C
60 점 이상 ~ 70점 미만 : D
60 점 미만 : F

char grade(int k){
  if(k >= 90) return 'A';
  else if(k >= 80 && k<90) return 'B';
  else if(k >= 70 && k<80) return 'C';
  else if(k >= 60 && k<70) return 'D';
  return 'F';
}

1580 : 원의 넓이

이 문제는 원의 넓이를 구하는 함수를 구현하는 문제입니다.

float circle(int r){
    return 3.14f*r*r;
}

1852 : 재귀로 1부터 n까지 한 줄로 출력하기

한 정수 n을 입력받아 1부터 n까지 한 줄로 출력하시오.

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

n보다 하나 작은 수까지 출력해주라는 뜻이다.

2563 색종이

#include <stdio.h>
int main() {
    int N;
    scanf("%d", &N);
    int paper[100][100] = {0};
    for (int n = 0; n < N; n++) {
        int x, y;
        scanf("%d %d", &x, &y);
        for (int i = x; i < x + 10; i++) {
            for (int j = y; j < y + 10; j++) {
                paper[i][j] = 1;
            }
        }
    }
    int area = 0;
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < 100; j++) {
            if (paper[i][j] == 1) {
                area++;
            }
        }
    }
    printf("%d\n", area);
    return 0;
}

paper[100][100] 배열을 선언하여 도화지를 표현하고 모든 요소를 0으로 초기화합니다. 각 색종이의 위치를 입력받아 해당 위치에서 10×10 크기를 1로 채웁니다.
도화지 배열을 순회하며 값이 1인 칸의 개수를 세어 검은 영역의 넓이를 계산합니다.

1859 : 별 삼각형 출력하기

한 정수 n을 입력받아 n층의 별 삼각형을 출력하시오.

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

main에서 n을 입력받는다. f함수로 이동한다. f함수는 1씩 늘어나면서 줄바꿈을 해주는 함수이다. 하지만 그전에 g함수를 호출해서 먼저 실행시켜야 한다. 왜냐하면 g함수가 을 출력해주는 역할이기 때문에 먼저 출력 을 사용해서 0부터 1씩 늘어남에 따라 출력해준다.

1860 : 수 삼각형 출력하기

한 정수 n을 입력받아 n층의 수 삼각형을 출력하시오.

#include <stdio.h>
void line(int start, int end) {
    if (start > end) return;
    printf("%d ", start);
    line(start + 1, end);
}
void triangle(int level, int n) {
    if (level > n) return;
    line(1, level);
    printf("\n");
    triangle(level + 1, n);
}
int main() {
    int n;
    scanf("%d", &n);
    triangle(1, n);
    return 0;
}

1912 : 팩토리얼 계산

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

1915 : 피보나치 수열

자연수 N을 입력받아 N번째 피보나치 수를 출력하는 프로그램을 작성하시오.

#include <stdio.h>
int p(int n) {
    if (n==1||n== 2) 
    return 1;
    return p(n-1) + p(n-2);
}
int main() {
    int n;
    scanf("%d", &n);
    printf("%d", p(n));
    return 0;
}

1920 : 2진수 변환

어떤 10진수 n이 주어지면 2진수로 변환해서 출력하시오.

#include <stdio.h>
void two(int n) {
    if (n==0) return;
    two(n/2);
    printf("%d", n%2);
}
int main() {
    int n;
    scanf("%d", &n);
    if (n==0) printf("0");
    else two(n);
    return 0;
}

함수 two에서 n==0을 통해 0일때는 2진수로 변환해도 2이기 때문에 예외처리를 해준다. n을 계속해서 2로 나눠주는 함수를 계속해서 호출해 나머지가 1이나 2로 나오게끔 해준다. printf문을 통해 2로 나눈 나머지를 출력한다.

1954 : 삼각형 출력하기 2

길이 n이 입력되면 역삼각형을 출력한다.

#include <stdio.h>
int n;
void g(int k) {
    if (k<=0) return;
    printf("*");
    g(k - 1);
}
void f(int k) {
    if (k<=0) return;
    g(k);
    printf("\n");
    f(k-1);
}
int main() {
    scanf("%d",&n);
    f(n);
    return 0;
}
profile
huso

0개의 댓글