일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 그리디
- 다이나믹프로그래밍
- 프로그래머스연습문제
- C
- 사칙연산
- 이분탐색
- 문자열
- 논문리뷰
- 프로그래머스sql
- 브루트포스알고리즘
- 그리디알고리즘
- 자료구조
- C++
- Image Classification
- 백준알고리즘
- C언어
- 논문구현
- SQL
- 수학
- 프로그래머스코딩테스트
- MySQL
- 소수판정
- 구현
- 해시를사용한집합과맵
- 정렬
- 이진탐색
- 정수론
- 큐
- 프로그래머스
- Today
- Total
초보 개발자의 이야기, 릿허브
[C] 백준 1065번 한수 본문
1. 문제이해
https://www.acmicpc.net/problem/1065
자연수 N의 각 자릿수가 등차수열을 이루는 수를 한수라고 한다.
N을 입력받고, 1부터 N까지의 한수의 개수를 출력하는 알고리즘을 구현하는 것이 목표이다.
2. 문제풀이
1부터 입력받은 N까지의 자연수 중 한수의 개수를 출력하는 문제이다. (N은 1000이하의 자연수이다.)
각 자릿수가 서로 등차수열을 이루어야 하기 때문에,
백의자리, 십의자리, 일의자리 숫자를 각각 비교해주었다.
예를 들어, 123의 경우
1과 2의 차가 1, 2와 3의 차가 1이므로
공차가 1인 등차수열을 이루는 한수이다.
472같은 경우에는
4와 7의 차가 -3, 7과 2의 차가 5이므로,
등차수열이 아니므로 한수가 아니다.
한자리, 두자리 숫자같은 경우에는 그 자체로 등차수열을 이루기 때문에 한수로 취급한다.
(72같은 경우 공차가 5인 등차수열로 취급한다.)
3. 소스코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//등차수열을 이루는지 검사
int AP(int a, int b, int c) {
return ((a - b) == (b - c)) ? 1 : 0;
}
int main() {
// N은 1000보다 작거나 같은 자연수
int N;
int a, b, c = 0;
int count = 0;
int i;
scanf("%d", &N);
if (N < 100) {
printf("%d", N);
}
else {
for (i = 100; i <= N; i++) {
a = i / 100; // 100의 자리
b = i / 10 % 10; // 10의 자리
c = i % 10; // 1의 자리
if (AP(a, b, c) == 1) {
count++;
}
}
// 100미만의 숫자들은 모두 한수
printf("%d", count + 99);
}
return 0;
}
메인 함수에서 N을 입력받고, N이 100미만의 수 (두자리, 한자리 자연수)일 경우에는
모든 수가 한수이므로, N을 그대로 출력해주었다.
N이 100이상의 수(세자리 자연수)면,
100부터 N까지의 자연수들을 각각 100의 자리, 10의 자리, 1의 자리숫자로 분해하여
등차수열을 이루는지, 즉, 한수인지를 판단하고, 한수이면 count 해주었다.
등차수열을 이루는지에 대한 확인은 함수로 따로 구현해주었는데,
등차수열이면 1, 아니면 0을 반환하도록 했다.
마지막 출력부분에서, 100미만의 숫자들은 모두 한수이므로,
count한 한수의 갯수에 99를 더해주었다.
한수라는 말은 사실 오늘 처음 들어봤는데, 이런 개념도 있구나~ 하고 하나 배운것같다.
내일이면 주말이고, 다음주에는 휴가니까..
내일까지 포스팅하고 며칠 쉬다 와야겠다.
쉬고 와서는 더 빡센 문제로 더 빡세게 공부해야지!😊
'코딩테스트 > 📗 백준 (BOJ)' 카테고리의 다른 글
[C++] 백준 2693번 N번째 큰 수 (0) | 2021.08.14 |
---|---|
[C] 백준 1676번 팩토리얼 0의 개수 (2) | 2021.08.11 |
[C++] 백준 1026번 보물 (0) | 2021.08.05 |
[C] 백준 1920번 수 찾기 (0) | 2021.08.04 |
[C] 백준 1978번 소수 찾기 (0) | 2021.08.03 |