문제 출처: www.acmicpc.net/problem/3052
1. 코드
2. 풀이
int a, arr[42] = { 0, }, cnt = 0;
for(int i = 0; i < 10; i++)
{
cin >> a;
이 문제는 단계별로 풀기로 보면 1차원 배열과 관련이 깊다. 그래서 배열을 활용하여 풀어보겠다. 우선 10번의 입력을 받아야 한다. 그래서 반복문을 통해서 10번을 입력받는다.
for(int i = 0; i < 10; i++)
{
cin >> a;
arr[a % 42] = 1;
}
그리고 난 다음에 arr배열의 크기 42이다. 배열에 저장해야 할 것은 입력한 a의 값을 42로 나눈 값에 위치한 인덱스 값을 식별하는 키값이다. 예를 들어 1을 42로 나누었을 때 나머지는 1이다. 그리고 배열의 인덱스 값이 1인 위치의 배열에 1이라는 키값을 입력하여 인덱스 값이 1인 배열에 나머지가 있고, 나머지의 값은 1이구나라는 것을 알 수 있다.
조금 헷갈릴 수 있으니 한번 더 예시를 들어보겠다. 만약 42를 입력했다면 42로 나눈다면 나머지는 0이다. 그렇다면 배열의 인덱스 값이 0인 위치에 1을 저장한다. 그렇다면 배열의 값이 1인 값들 중 배열 인덱스 값이 0인 위치를 인식하고 0이 나머지라는 것을 인식할 수 있게 된다.
for(int i = 0; i < 42; i++)
if (arr[i])
cnt++;
그리고 난 다음 배열의 값이 1(참)이라면 cnt의 값을 1씩 증가시킨다. cnt의 값으로 현재 배열에 나머지들의 개수를 파악할 수 있다.
cout << cnt;
다 파악을 한 뒤에 cnt의 값을 출력하면 마무리된다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1018번: 체스판 다시 칠하기 [C++] (0) | 2021.02.04 |
---|---|
백준 알고리즘 10757번: 큰 수 A+B [C++] (0) | 2021.01.17 |
백준 알고리즘 2577번: 숫자의 개수 [C++] (0) | 2021.01.02 |
백준 알고리즘 2562번: 최댓값 (0) | 2020.12.26 |
백준 알고리즘 10818번: 최소, 최대 [C++] (0) | 2020.12.21 |