사용언어 : 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
'CodingTest > BOJ' 카테고리의 다른 글
[BOJ 2606] 백준 바이러스 풀이 - c++ (0) | 2021.09.12 |
---|---|
[BOJ 8958] 백준 OX퀴즈 풀이 - C++ (0) | 2021.09.10 |
[BOJ 2577] 백준 숫자의 개수 풀이 - C++ (0) | 2021.09.07 |
[BOJ 2562] 백준 최댓값 풀이 - C++ (0) | 2021.09.07 |
[BOJ 2439] 백준 별 찍기 - 2 풀이 -C++ (0) | 2021.09.06 |