코딩해요/C

[백준/C언어] 1차원 배열 문제풀이(2)

yenas0 2023. 8. 1. 22:41
반응형

 

#3052번 : 나머지

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int* a;
 
    a = (int*)malloc(10 * sizeof(int));
 
    if (a == NULL)
    {
        printf("메모리 할당 오류");
        exit(1);
    }
 
    int i;
    int k;
    int count = 0;
    int result = 0;
 
    for (i = 0; i < 10; i++)
    {
        scanf("%d"&a[i]);
        a[i] = a[i] % 42;
    }
 
    for (i = 0; i < 10; i++)
    {
        count = 0;
 
        for (k = 9; k >= i + 1; k--)
        {
            if (a[i] != a[k])
                count++;
        }
        if (count == 10 - (i+1))
        {
            result++;
        }
    }
 
    printf("%d", result);
 
    free(a);
    return 0;
}
cs
1. 배열 a에 10개의 정수를 저장할 수 있는 동적 메모리를 할당하고 정수 scanf로 받은 후 42로 나눈 나머지를 다시 a[i]값에 저장함. 

2. a[i]랑 그 뒤에 있는 변수들을 비교해서 나머지가 다른 경우에 count를 증가 시킴.

3. count가 10-(i+1)과 같다면 해당 변수가 고유한 나머지값이라는 의미가 되므로 result를 증가시킴

 

 

count를 for문에서 초기화하지 않았더니 계속 result가 1만 나왔었다.. 꼭 for문 안에서 count를 0으로 초기화를 시켜놓아야 마지막 if문이 정상적으로 연산이 된다. 그렇지 않으면 계속 누적되어서 count값이 늘어나므로.. if문의 실행 의미가 없어진다.

 

 

 
    for (i = 0; i < 10; i++)
    {
        count = 0;
 
        for (k = 9; k >= i + 1; k--)
        {
            if (a[i] == a[k])
                count = 1;
        }
        if (count == 0)
        {
            result++;
        }
    }
 
cs

count연산이 복잡하다면 이렇게 해도 될 것 같다.

count를 0으로 해놓고, 만약 같은 나머지가 존재한다면 1로 변경한 후 count가 0일 때만 result를 증가시키는 방식이다.

 

 

 

 

 

 

 

 

 

#10811번:바구니 뒤집기

 

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int* basket;
 
    basket = (int*)malloc(100 * sizeof(int));
 
    if (basket == NULL)
    {
        printf("메모리 할당 오류");
        exit(1);
    }
 
    int N, M, i, j;
    int k, t;
    int temp;
 
    scanf("%d"&N);
 
    for (k = 0; k < N; k++)
    {
        basket[k] = k + 1;
    }
 
    scanf("%d"&M);
 
    for (k = 0; k < M; k++)
    {
        scanf("%d %d"&i, &j);
 
        if (i == j)
        {
            continue;
        }
 
        {
            for (t = 0; t < (j - i + 2/ 2; t++)
            {
                temp = basket[i - 1 + t];
                basket[i - 1 + t] = basket[j - 1 - t];
                basket[j - 1 - t] = temp;
            }
        }
    }
 
    for (k = 0; k < N; k++)
    {
        printf("%d ", basket[k]);
    }
 
    free(basket);
    return 0;
}
cs

.

반응형