먼저 나는 처음에 보고 감이 안잡혔다. n이 18이라고 가정하고, 3을 6개 쓰는 경우와 5를 3개, 3을 1개를 쓰는 경우를 구분하면서 푸는 규칙이 보이지 않았다.
그래서 무작정 3부터 20까지 적어보았다.
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|
3 | 4 | 3 | 4 | 3 | 4 | 5 | 4 | 5 | 4 |
뭔가 보였다. 짝수번은 4로 고정되어있다.
홀수번과 짝수번으로 나누어서 고려를 하는 방향으로 가닥을 잡았다.
계속 21부터 30까지 적어보았다.
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
---|---|---|---|---|---|---|---|---|---|
5 | 6 | 5 | 6 | 5 | 6 | 7 | 6 | 7 | 6 |
짝수번은 십의 자리가 바뀌니 6으로 고정이 된다. 당연한게 12에서 22로 10 증가하면, 5가 2개 증가하는 것이기 때문에 2씩 차이가 난다.
당연하게 30, 40, 50 ... 계속 2씩 차이가 날 것이다.
다음은 홀수다.
11,13,15는 3이다.
17, 19, 21, 23, 25는 5이다.
27, 29, 31, 33, 35는 7이다.
같은 논리로 2씩 증가하며, 고려해야 할게 뭔가 불편하게 숫자가 정리되어 있는 것이다.
풀이에서 보자.
#include <stdio.h>
int main()
{
int n, count;
scanf("%d", &n);
if (n <= 10)
{
if (n == 3 || n == 5)
printf("1");
else if (n == 4 || n == 7)
printf("-1");
else if (n == 6 || n == 8 || n == 10)
printf("2");
else
printf("3");
} // 일의 자리에서는 케이스별로 다 하나씩 분류해주었다.
// 어차피 -1이 되는 값은 4와 7밖에 없고, 그 후론 무조건 나누어진다.
else
{
if (n % 10 == 0)
{
count = 2;
count = n / 10 * 2;
printf("%d", count);
} // 20, 30, 40.. 은 5로 잘 나누어지기에 따로 분류를 해주었다.
// 처리를 안해주면 값이 달라진다.
else if (n % 2 == 0)
{
count = 2;
count = count + n / 10 * 2;
printf("%d", count);
} // 10으로 나눈 값의 몫만큼 2를 곱해준다. 그 값을 count에 저장 후 출력.
else
{
count = 3;
n = n - 6; // 불편한 숫자들을 -6으로 깔끔하게 처리를 해준다.
count = count + n / 10 * 2; // 그 값을 위 논리대로 출력.
printf("%d", count);
}
}
}
#include <stdio.h>
void main() {
int Box = 0, input;
scanf("%d", &input);
while (1) {
if (input % 5 == 0) {
Box += input / 5;
printf("%d", Box);
break;
}
input = input - 3;
Box++;
if (input < 0) {
printf("-1");
break;
}
}
}
box변수 선언, input에 3을 계속 빼주면서 % 5 가 될 때까지 나누어준다. 4와 7이 아닌 이상 무조건 if에 걸리는데, box값을 input / 5 더하면서 출력 후 반복문 탈출.
안걸릴 경우 -1 출력 후 탈출.
너무 깔끔하다..ㄷㄷ