반응형
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int an(int n);
int an(int n) {
int f, s, t = 0; //first,second,third
int count = 99; // 한 자리수와 두 자리수는 모두 등차수열을 이룬다.
if (n < 100) { return n; }
else {
for (int i = 100; i <= n; i++) {
f = i % 10; // 일의 자리
s = (i % 100) / 10; // 십의 자리
t = i / 100; // 백의 자리
if ((f - s) - (s - t) == 0) { count++; } // 공차 d가 같기 때문
}
return count;
}
}
int main() {
int n;
scanf("%d", &n);
printf("%d",an(n));
return 0;
}
☞ 풀이 전
문제를 이해하기 어렵지 않았고 그 문제를 일단 코드로 써보는데도 어렵지 않았다.
이전에 풀었던 셀프 넘버 함수와 매개변수의 자료형이 같아서일까 거부감 없이 잘 구상했다.
한 자리수와 두 자리수는 등차수열이 아닌가?라는 고민은 예제 출력이 말끔히 해결해줬었다.
한 자리수와 두 자리수는 모두 등차수열이다.
☞ 풀이 후
함수 내에서 각각의 자리에 위치한 수를 뽑아내기 위해
f = n % 10; // 일의 자리
n /= 10; // 오류의 원인
s = n % 10; // 십의 자리
t = n / 10; // 백의 자리
위와 같이 작성했었으나 n/=10으로 for문이 더 이상 참이 될 수 없었다..
#include <stdio.h>
int seq(int n);
int main(void) {
int input;
scanf("%d", &input);
printf("%d", seq(input));
}
int seq(int n) {
int count=0;
for(int i=1; i<n+1; i++) {
if(0<i && i<100) count++;
else if(i<1000) {
if( i/100 - (i%100)/10 == (i%100)/10 - ((i%100)%10) ) count++;
}
}
return count;
}
https://develop247.tistory.com/20
개인적으로 정말 코드를 간결하게 잘 짠다고 생각하는 분인데 사소하지만 마지막 조건식이 같아서 좋았다..
100이상일 때 각각의 자리수를 따로 변수에 저장하지 않고 바로 계산하셨다.
또 한 자리수와 두 자리수를 for문을 통해 모두 count해주었다.
요런 식으로도 생각할 수 있겠구나 이 분걸 보면 항상 이렇게 느낀다.
반응형
'Baekjoon' 카테고리의 다른 글
[C] 백준 1008번 : A/B (0) | 2023.01.10 |
---|---|
[C] 백준 2908번 : 상수 (0) | 2023.01.09 |
[C] 백준 4673번 : 셀프 넘버 (0) | 2023.01.07 |
[C]백준 15596번 : 정수 N개의 합 (0) | 2023.01.05 |
[C] 백준 4344번 : 평균은 넘겠지 (0) | 2023.01.04 |