본문 바로가기
백준 알고리즘 단계별 풀이 (문제 수)/1차원 배열 (7)

[C++] 나머지 배열에서 서로 다른 값 찾기 : 3052번

by 17번 일개미 2022. 6. 18.
728x90

문제

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 

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

 


풀이

#include <iostream>
using namespace std;

int main()
{
	int number; int mod[10];
	int result = 0; int count[42] = { 0, };
	// 숫자 10개 입력 저장
	for (int i = 0; i < 10; i++)
	{
		cin >> number;
		cin.ignore();
		mod[i] = number % 42; // 나머지 저장
	}
	// 나머지 값들을 같은 종류끼리 묶어서 갯수 저장 >> 겹치지 않게 갯수 셈
	for (int i = 0; i < 10; i++)
	{
		count[mod[i]]++; // 나머지의 종류끼리 분류하여 갯수를 센다
		// ex) count[35]++ >> 나머지가 35인 경우 + 1
	}
	for (int i = 0; i < 42; i++) // 나머지는 0 ~ 41 범위
	{
		if (count[i] > 0) // 0 이 아니면 값이 한 번은 나왔으므로
		{
			result++;
		}
	}
	cout << result;
}

1. 문제에 필요한 저장공간 선언 및 할당

2. 숫자를 입력받으면서 바로 42로 나누어 나머지를 배열에 저장한다.

3. 나머지의 범위는 0 ~ 41 사이 이므로 count 라는 42개의 공간을 가진 배열 선언

4. count[21], count[3], count[16] ... count[나머지값] 등 각각 나머지 값이 나온 인덱스를 찾아가 배열값을 1씩 증가

5. 배열값이 0이면 해당 나머지는 존재하지 않는다, 배열 값이 1보다 크면 존재하는 나머지이다.

6. 결론적으로 1보다 크면 존재하는 나머지이기에, 배열 값이 1보다 큰 곳을 찾아 숫자를 센다.

7. 출력

728x90