Notice
Recent Posts
Recent Comments
Link
궤도
[EPPER] 10회 6번 본문
문제
풀이
문제가 좀 길지만 잘 읽어보면 어려운 문제는 아니다. 일단 반복문이 언제 끝날지 모르니 while loop를 사용했다. 모든 자릿수의 수가 나와야 반복문이 끝날테니 각 자릿수의 출현 여부를 체크하는 bool 배열도 만들고 이 배열의 모든 값이 true인지 확인하는 함수도 만들었다. 여기까지 했다면 나머지는 쉽다.
isAll 함수로 반복문을 탈출할 수 있는지 체크하며 숫자 A를 쪼개가며 digit 배열을 갱신한다. 코드에서의 i가 문제에서의 n이 되는 셈인데 마지막에 i++를 해주기 때문에 이미 모든 자릿수가 나온 상태에서도 무조건 i를 하나 더 증가하게 된다. 그러니 마지막 출력에서 빼준다.
소스코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
bool digit[10] = { 0, }; //각 자릿수의 수가 나왔는지 체크하는 bool 배열
bool isAll() { //모든 자릿수가 나왔는지 확인하는 함수
for (int i = 0; i < 10; i++) {
if (!digit[i])
return false;
}
return true;
}
int main() {
int A, i = 1;
scanf("%d", &A);
while (!isAll()) { //모든 자릿수가 나오면 loop 벗어남
int tmp = A * i;
while (tmp != 0) { //숫자 쪼개며 확인
digit[tmp % 10] = true;
tmp /= 10;
}
i++;
}
printf("%d\n", i - 1); //마지막에 i가 증가됐을테니 하나 빼주는 것
}
Comments