https://www.acmicpc.net/problem/4673
음... 일단 접근했던 생각은 아래와 같았다.
1. 생성자의 조건은 무엇인가?
2. 생성자가 없는지 확인하는 방법은 뭐가 있을까?
2-1. 주어진 숫자 범위 (1 ~ 10000)까지 매 숫자마다 생성자의 조건을 체크한다.
2-2. 주어진 숫자 범위 (1 ~ 10000)를 생성자로 만들 수 있는 수를 확인해서 플래그를 변경한다.
선택은 2-2로 풀이했다. 메모리를 많이 쓰긴하지만, 이게 더 속도가 빠를 것으로 판단했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int solution(int &value)
{
int res = value;
char vString[6] = { 0, };
sprintf(vString, "%d", res);
unsigned int strLen = strlen(vString);
char *pBuffer = new char[strLen*2];
for (unsigned int loopCount = 0; loopCount < strLen; loopCount++)
{
pBuffer[loopCount * 2] = vString[loopCount];
pBuffer[(loopCount * 2) + 1] = '\0';
}
for (unsigned int loopCount = 0; loopCount < strLen*2;)
{
res += atoi(&pBuffer[loopCount]);
loopCount += 2;
}
return res;
}
const int MAX_VALUE = 10000;
int main()
{
bool flagArray[MAX_VALUE + 1] = {false, };
for (int loopCount = 1; loopCount < MAX_VALUE + 1; loopCount++)
{
flagArray[solution(loopCount)] = true;
}
for (int loopCount = 1; loopCount < MAX_VALUE + 1; loopCount++)
{
if (flagArray[loopCount] == false)
printf("%d\n", loopCount);
}
return 0;
}
| cs |
댓글 없음:
댓글 쓰기