#문제
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 ��
www.acmicpc.net
#풀이
문제에서 N이 1000 이하의 자연수라고 하였으므로 경우를 그냥 나누어 문제를 풀 수 있다. 우선 1부터 99까지는 모두 한수이고, 1000은 한수가 아니다. 따라서 우리는 세 자릿수가 한수인지 판단하기만 하면 문제가 해결된다. 이는 각 자릿수를 살펴보는 법을 이용하면 된다.(10으로 나눈 나머지를 구하고 10으로 나눈다)
만약 N이 매우 큰 수로 주어진다면 이러한 방법을 이용할 수 없을 것이다. 그때는 while문을 이용하여 등차가 같은지 계속해서 확인하고 등차가 달라졌다면 break 하는 방법을 시도할 수 있겠다.
#소스코드
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
|
#include<iostream>
using namespace std;
int main(void)
{
int N;
cin >> N;
if (N == 1000) N = 999;//1000은 어차피 한수가 아니므로
int cnt = 0;//한수의 개수를 count할 변수
for (int i = 1; i <= N; i++) {
if (i <= 99) {
cnt++;
}
else{
//i는 100부터 999까지
int temp = i;
int n1 = temp % 10;
temp /= 10;
int n2 = temp % 10;
temp /= 10;
int n3 = temp;
if ((n2 - n1) == (n3 - n2))
cnt++;
}
}
cout << cnt;
return 0;
}
|
cs |
'Algorithm > Brute-force' 카테고리의 다른 글
[C++] 백준 2798번 : 거꾸로 구구단 (B2) (0) | 2020.07.15 |
---|---|
[C++] 백준 4641번 : Doubles (B1) (0) | 2020.07.15 |
[C++] 백준 7568번 : 덩치 (S5) (0) | 2020.07.15 |
[C++] 백준 2858번 : 기숙사 바닥 (B2) (0) | 2020.07.15 |
[C++] 백준 1436번 : 영화감독 숌 (S5) (0) | 2020.07.15 |