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
'백준 알고리즘 단계별 풀이 (문제 수) > 1차원 배열 (7)' 카테고리의 다른 글
[C++] OX퀴즈 : 8958번 (0) | 2022.06.20 |
---|---|
[C++] 특정 공식으로 새로운 평균 구하기 : 1546번 (0) | 2022.06.18 |
[C++] 각 자릿수의 숫자 갯수 세기 : 2577번 (0) | 2022.06.18 |
[C++] 배열에서 최댓값 찾고 인덱스 구하기 : 2562번 (0) | 2022.06.18 |
[C++] 배열에서 최솟값, 최댓값 구하기 : 10818번 (0) | 2022.06.18 |