[백준 C] 3052 : 나머지

anfruf·2022년 6월 3일

백준 C언어

목록 보기
38/62
  1. C언어 : 1차원 배열(4)

03.JUN.2022

문제 : 1차원 배열

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 
있는지 출력하는 프로그램을 작성하시오.

문제 풀이

#include <stdio.h>

int main()
{
	int input, count = 0;
	int arr[42] = { 0, };

	for (int i = 0; i < 10; i++) { // 서로 다른 수 10개 입력받기
		scanf("%d", &input);
		
        // 배열 arr[42]를 돌며 입력받은 수 % 42와 같은 수의 index에 +1
		int n = input % 42; 
		for (int j = 0; j < 42; j++) { 
			if (n == j) {
				arr[j]++;
			}
		}
	}
	
    // arr 배열을 돌며 서로 다른 수 count 하기
	for (int i = 0; i < 42; i++) {
		if (arr[i]) count++;
	}

	printf("%d", count);
    
    return 0;
}

나머지의 경우를 담을 수 있는 배열 arr을 arr[42]로 정의.

<첫 번째 for문>
입력받는 수는 10개라고 정해져 있으므로 for문의 범위를 잡아 입력을 받고, 입력받은 수 % 42를 변수 n에 담아주었다.
그리고 arr[42]를 돌며 변수 n과 같은 수를 가진 index에 +1을 시켜준다.
예를 들어 숫자 '126' 입력이 들어왔을 때, 126 % 42 == 0이므로 arr[0]에 +1이 된다.

<두 번째 for문>
arr 배열을 돌며 각 index에 들어있는 값이 0이 아닐 때를 센다.
예를 들어 입력에 1~10을 입력했다면 각 숫자의 %42는 1~10이다. 이는 첫 번째 for문에서 arr[1]~arr[10]에 +1의 값이 들어가 있을테니 count 했을 때 총 10개의 서로 다른 값이 나온다.

0개의 댓글