백준 1065번 : 한수

dldzm·2021년 1월 26일
0

알고리즘 공부

목록 보기
13/42
post-thumbnail

링크 : https://www.acmicpc.net/problem/1065

한수 자체 의미를 이해 못했다.

  • 1의 자리수일 경우 : 모두 한수이다.
  • 10의 자리수일 경우 : 모두 한수이다. 십의 자리에서 일의 자리로 d만큼 등차되었다고 본다.
  • 100의 자리수일 경우 : 따져봐야 한다. abc 라고 보았을 때, a-b만큼의 차이와 b-c의 차이가 같아야 등차로 움직였다고 볼 수 있다.

문제를 잘 읽자.

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면

게다가

1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력

해야 하는 조건을 가졌지만 하나도 제대로 읽지 않아서 시간 낭비 겁나 했다. 잘하는 짓이다.

#include <iostream>
using namespace std;

int main() {
	int N, count = 0;
	cin >> N;
	if (N >= 100) {
		count = 99;
		for (int i = 100; i <= N; i++) {
			int a = i / 100;
			int b = i / 10 % 10;
			int c = i % 10;

			if (a - b == b - c)
				count++;
		}
	}
	else {
		count = N;
	}	
	cout << count << endl;
}

여기서 복습할 것은 abc를 어떻게 얻어내었는가이다.

  • a : int a = i / 100; a는 정수이므로 몫을 받아낸다.
  • b : int b = i / 10 % 10; b를 먼저 10으로 나누면 1의 자리 수가 제거된 채 십의 자리 수로 받아진다. 그 후 나머지 연산자를 사용하면 현재는 1의 자리 수(실제로는 십의 자리 수)를 얻는다.
  • c : int c = i % 10; 나머지 연산자를 통해 얻는다.
profile
🛰️ 2021 fall ~

0개의 댓글