본문 바로가기

CodingTest/BOJ

[BOJ 3052] 백준 나머지 풀이 - C++

사용언어 :  C++

 

문제풀이

 

-변수

int arr[42]; 
int tmp; //값 입력받을 때 사용할 변수
int cnt; //답 (서로 다른 나머지가 몇 개 있는지 저장)

(1) 나머지 갯수 저장하는 배열 생성

// 나머지 값이 index인 수가 몇 개인지 저장하는 배열 
// 즉, 각 배열엔 해당 index가 나머지인 숫자의 개수가 저장돼있음
int arr[42];

 

(2) 반복문으로 입력받은 수의 나머지를 구해 arr의 해당 index의 값을 1 증가해주기

	for (int i = 0; i < 10; i++) {
		cin >> tmp;
		arr[tmp % 42]++;
	}

 

(3) 0부터 41까지 돌면서 (42로 나눌 때 나머지가 될 수 있는 값들) 해당 index의 값이 1이상이면 cnt 값 증가해주기

for (int i = 0; i < 42; i++) {
		if (arr[i])
			cnt++;
	}

해당 index값이 0이 아니란 말은 해당 index를 나머지로 갖는 값이 1개 이상 존재한다는 뜻

즉, 해당 index를 나머지로 갖는, 서로 다른 나머지 값이 존재하는 것 

 

 

전체코드

#include <iostream>
using namespace std;
int arr[42]; 
int tmp; int cnt;
int main() {
	for (int i = 0; i < 10; i++) {
		cin >> tmp;
		arr[tmp % 42]++;
	}
	for (int i = 0; i < 42; i++) 
		if (arr[i])
			cnt++;
	cout << cnt;
}

 

 


총평

생각보다 수월하게 풀었던 문제. 크기가 42인 int형 배열(나머지 저장)을 만들어준 게 중요한 문제였던 것 같다.

(그에 비해 문제풀이에 작성한 풀이가 맘에 들진 않는다 )


문제 출처

https://www.acmicpc.net/problem/3052

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net