4375 - 1

재찬·2023년 1월 13일
0

Algorithm

목록 보기
17/64

문제

코드

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;

int main(){
 
 while(cin >> n){
 	int cnt = 1; int ret = 1;
 	while(true){
 		if(cnt % n == 0){
 			cout << ret << "\n";
 			break;
		 }
		 else{
		 	cnt = (cnt * 10) +1;
		 	cnt %= n;
		 	ret++;
		 }
	 }
 }
  return 0;
}

풀이

문제를 풀 때 최대, 최소 값에 따라 아이디어의 큰 틀을 결정한다.
이번 문제는 최대 값이 10000이었기에 전체를 탐색해도 가능하겠다라는 생각이 들었다.
주어진 수에 대한 조건은 2와 5의 배수가 아니라는 것이었지만
주어진 수이기에 배제하고 넘어가는 것으로 결정했다.
그렇다면 n의 배수 중 1로만 이루어진 수의 자리 수 결정. 이 핵심 문젠데 1부터 11 111 1111을 쭉 n으로 나눠보는 것으로 결정했다.
따라서 while(cin >> n) 입력을 계속 받겠다.
cnt를 1부터 10곱하고 1더하고 하면 1로만 이루어진 수가 되니까 만들고 하나 세고
만약 나눠지면 세어진 수를 출력하도록 코드를 설계했다.

결과

후기

왤케 어려운지 모르겠다. 최대값이 낮아서 무식하게 다 해보는게 맞다는 생각까지 들었는데
어느 부분까지를 조건으로 잡아야할지, 이 조건들을 어떤 순서로 설계해야 효율적일지에 대해 감이 안잡혔다.
이번 문제는 1로만 이루어진 수를 만드는 방법과 무식하게 하나씩 해봐야겠다는 생각 2가지가 핵심이었다고 생각한다.

0개의 댓글