Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 전자책
- 브런치
- IT
- LJESNJAK
- QA
- BAKA
- Process Communication
- process control
- 백준
- The Balance of the World
- 입력 버퍼
- Zero That Out
- 1874
- Baekjoon
- 시프
- 해바
- system programming
- 10773
- 4949
- c
- 2941
- File 조작
- 5622
- 시스템 프로그래밍
- For Beginners
- file IO
- 바샤
- 균형잡힌 세상
- Parenthesis
- c++
Archives
- Today
- Total
해바
1065) 6. 함수 : 한수 본문
문제
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
내 코드
한수는 쉽게 말해 123, 642, 369와 같이 등차수열과 공차의 개념이 자릿수의 숫자 간 존재하는 수를 말한다. 근데 생소한 개념이라 그런지 아니면 중요하지 않아서 그런지 백과에서 도통 찾을 수가 없었다ㅠ
한수가 뭔지 이해하고나서, '그럼 1자리 수의 경우는 어떻게 처리해?' 하는 의문에 대한 해답을 찾는데 또 시간이 걸렸다..
결론은 1~99 까지는 해당 수만큼 개수를 세면 되고, 100 이상부터는 별도로 계산해서 세면 된다는 것!
3 자릿수만 가정해서 코드를 짜면 훨씬 깔끔하지만 짜다 보니 1000인 경우에 대해서만 예외를 만드는 게 마음에 안 들어서 자릿수에 구애받지 않는 코드를 짜보았다. 테스트해보니 10,000,000 까지는 결과를 띄워주는데 역시 $O(n^2)$ 코드의 한계 때문에 그 이상은 먹통이 된다. 더 좋게 개선할 수 있을 거 같은데.. 당장은 벡터를 굳이 쓰지 않아도 되겠다는 것 정도? 아 모르겠다~~~
#include "stdio.h"
#include "vector"
int aSize(int n) {
// 자리수 계산 함수
int count(0);
while(n != 0) {
count++;
n /= 10;
}
return count;
}
int d(int n) {
// 한수 개수를 구하는 함수
if(n < 100) return n;
int count(99), size(0), temp(0);
std::vector<int> a;
for(int i(100); i <= n; i++) {
size = aSize(i);
a.assign(size, 0); // 사이즈만큼 배열 크기 할당
temp = i;
for(int j(0); j < size; j++) {
a[j] = temp % 10; // 한자리씩 배열에다 저장
temp /= 10;
}
temp = a[0] - a[1];
for(int j(1); j < size; j++) {
if(temp == (a[j] - a[j + 1])) { // ex. 123에서 1 - 2 == 2 - 3 이면
if((j + 1) == (size - 1)) count++; // 최대자리수 한수 체크
else temp = a[j] - a[j + 1]; // 다음 자리수로 이동
}
else break;
}
}
return count;
}
int main() {
int n(0);
scanf("%d", &n);
printf("%d\n", d(n));
return 0;
}
'C, C++' 카테고리의 다른 글
11720) 7. 문자열 : 숫자의 합 (0) | 2019.08.12 |
---|---|
2447) 6. 함수 : 별 찍기 - 10 (0) | 2019.08.11 |
4673) 6. 함수 : 셀프 넘버(Self Number) (0) | 2019.08.06 |
10817) 2. if문 : 세 수 (0) | 2019.08.06 |
8958) 5. 1차원 배열 : OX퀴즈(Score) (0) | 2019.08.06 |
Comments