[ 문제 ]
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다.
예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다.
그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
[ 출력 ]
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
[ 작성한 코드 ]
#include <stdio.h>
int main(int argc, char *argv[])
{
int a; //입력 받을 자연수
int arr[10]; // 연산 후 나머지 값을 저장할 배열
int answer = 0;
for(int i = 0; i < 10; i++)
{
scanf("%d",&a);
arr[i] = a % 42;
}
for(int i = 0; i < 10; i++)
{
int cnt = 0; //중복값 체크하기위한 변수
for(int j = i + 1; j < 10; j++)
{
if(arr[i] == arr[j])
{
cnt++;
}
}
if(cnt == 0){
answer++;
}
}
printf("%d",answer);
return 0;
}
수 10개를 입력받고 입력받은 수를 42로 나눈 나머지는 10개이니 배열의 값을 10으로 설정했다.
배열에 입력된 나머지값들을 비교할 때 만약 그 값이 중복이라면 cnt 변수의 값을 하나씩 증가시켰고
만약에 중복되지 않는다면 (cnt가 0이라면) answer 값을 증가시켰다.
우리가 구해야하는 결과값은 중복값이 아닌 중복이 아닌 값들의 개수여서 answer을 출력한다.
처음에 문제를 풀 떄 cnt 값을 main 함수 아래에 바로 선언을 했는데, 그렇게 되면 이중 for문을 수행할 때 cnt값이 초기화가 되지 않아 cnt == 0 이라는 조건 자체가 수행되지 않는다는걸 깨달았다.
따라서 이중 for문에 cnt = 0을 삽입해 i값이 증가할때마다 cnt가 초기화 될 수 있도록 만들었다.
알고리즘 분류
- 수학
- 사칙연산
'백준 알고리즘 코딩' 카테고리의 다른 글
[C언어] 백준 1546번 평균 (0) | 2025.03.20 |
---|---|
[C언어] 백준 10811번 바구니 뒤집기 (0) | 2025.03.19 |
[C언어] 백준 3052번 나머지 (0) | 2025.03.19 |
[C언어] 백준 5597번 과제 안 내신 분…? (0) | 2025.03.19 |
[C언어] 백준 10813번 공 바꾸기 (1) | 2025.03.19 |