문제 URL:
3052번: 나머지
각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.
www.acmicpc.net
이 문제는 숫자 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구하고,
그 다음 나머지가 서로 다른 값이 몇 개 있는지 출력하는 프로그램이다.
이 문제를 풀기 위해 먼저 배열을 만들어 숫자를 입력받고,
입력받은 숫자를 42로 나눈 나머지 값을 다른 배열에 저장했다.
그 뒤 반복문을 이용하여 배열의 요솟값들을 비교해주었는데,
입력받은 요솟값과 이전에 입력받은 배열의 모든 요솟값이 비교된 뒤, 같은 값이 존재하지 않을 경우에만
서로 다른 값이라고 파악하고 count변수를 증가시켜줘야하기 때문에
반복문 안에 조건문을 이용하여 코드를 작성해주었다.
만약, 비교된 두 값이 다르다면 continue를 통해 계속 반복문을 진행하다가
두 요소가 연속된 요소(즉, 맨 마지막 두 요소)이면서 값이 다르다면
입력받은 요솟값과 이전에 입력받은 배열의 모든 요솟값이 서로 다르다는 의미이므로
count변수를 증가시켜준다. (단, 입력받은 수가 처음으로 입력받은 수일 경우에는 반복문을 이용하지 않는다.)
또한, 만약 비교된 두 값이 같다면 count를 증가시켜줄 필요가 없으므로 break를 통해 즉시 반복문을 빠져나온다.
위 과정을 거친 코드는 아래와 같다.
#include<iostream>
using namespace std;
int main()
{
int list[10], count = 1;
int listR[10] = {0,};
for(int i=0; i<10; i++)
{
cin >> list[i];
listR[i] = list[i] % 42;
for(int j=0; j<i; j++)
{
if((listR[j]!=listR[i])&&(j==i-1))
count++;
else if(listR[j]!=listR[i])
continue;
else
break;
}
}
cout << count;
}