- 적어도 대부분의 배수 -> 주어지는 다섯 수 중 최소 3개 이상의 수로 나누어
떨어지면서 가장 작은 수
-> 조건을 만족시키면서도 가장 작아야하므로 for문을 활용하여 1부터 조건에
대입시키고 조건을 만족한다면 break로 빠져나온 후 출력- 하지만 조건을 만족하는 숫자가 나올때까지 반복해야되서 끝이 특정되어 있지 않기 때문에 원래 쓰던 for(int i=1; i<n; i++)를 쓸 수 없다
- 숫자%주어진 숫자=0인 경우 나누어떨어진 것이기 때문에 count+1
- 이를 5번 반복했을 때 count가 3이상이라면 조건을 만족했기 때문에 출력
- for문을 활용한 무한 반복문
for(int j=1; j++) //break할때까지 j가 1씩 커지며 무한 반복
-문제에 응용
for (int j = 1;; j++) //조건을 만족하는 적어도 대부분의 배수가 나오면 종료 { for (int i = 0; i < 5; i++) { if (j % num[i] == 0) count++; } if (count >= 3) { printf("%d", j); break; } else count=0; //중요: 초기화하지 않으면 틀림 }
- 적어도 대부분의 수가 아닌 경우 count=0을 하지 않으면 다음 숫자에 전 숫자들이 조건을 만족했던 횟수가 누적되서 들어가기 때문에 실제로는 대부분의 배수가 아닌데도 조건에 맞는 수라고 프로그램이 착각하고 출력하게 됨
#include<stdio.h>
int main()
{
int num[6] = { 0 };
int count = 0;
int i, j;
for (int i = 0; i < 5; i++)
{
scanf("%d", &num[i]);
}
for (int j = 1;; j++) //무한반복문
{
for (int i = 0; i < 5; i++)
{
if (j % num[i] == 0)
count++;
}
if (count >= 3)
{
printf("%d", j);
break;
}
else
count = 0;
}
return 0;
}
for문을 활용하여 어떻게 하면 무한반복문을 만들어야할지 몰라서 검색을 한 후 풀었는 데 다시 생각해보니 while문을 활용해서도 풀 수 있었다.
처음에는 막연하게 어떻게 구현할 수 있을까라는 생각이 들었는데 count를 활용하여
조건을 처리하니 별로 어려운 문제가 아니였다.
- while문으로 구현
int num=1; //적어도 대부분의 배수 후보 int real=0; //적어도 대부분의 배수 while(1) { ~조건 생략 if(count>=3) real=num; break; else count=0; num++; }
-적어도 대부분의 배수는 5개의 숫자 중 가장 작은 수보다 크거나 같으므로 min을 구한 다음에 min부터 for문을 돌리면 시간을 조금이라도 더 줄일 수 있다