-
1065번 한수 / Baekjoon BOJ 백준 1065 C++ 코드, 해설, 풀이[백준 알고리즘]/[C++] 2020. 9. 4. 23:16728x90반응형
이번 포스팅은 백준 1065번 한수입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
https://www.acmicpc.net/problem/1065
12345678910111213141516171819202122232425262728293031#include <iostream>using namespace std;bool checkMatch(int n);int main() {int n;cin >> n;int ans = 0;for (int i = 1; i <= n; i++) {if (checkMatch(i) == true) ans += 1;}cout << ans;return 0;}bool checkMatch(int n) {int digit1, digit2, digit3;digit1 = n / 100; //백의 자리digit2 = (n / 10) % 10; //십의 자리digit3 = n % 10; //일의 자리int diff1, diff2;diff1 = digit1 - digit2;diff2 = digit2 - digit3;if (n < 100 || diff1 == diff2) return true;else return false;}cs 함수를 만드는 연습을 하는 간단한 문제입니다.
문제 조건에서의 "한수"는 어떠한 수의 각 자릿수가 등차수열 즉, 일정한 차이를 이루는 수입니다. (수학 용어인가 해서 수학용어사전을 찾아보았으나 공식적인 단어는 아닌 거 같습니다. ㅎㅎ)
따라서 한 자릿수와 두 자릿수는 모두 한수에 해당합니다.
문제 조건에서 1000 이하의 자연수 N이 주어진다고 명시되어있으므로 세 자릿수 N의 한수 여부를 판단해주는 bool 함수 checkMatch를 작성해 N이하의 한수의 개수를 구해봅시다.
각 자리수를 추출하기 위해 int형 변수를 자리마다 구하기 위해 '/', '%' 연산자를 사용합니다.
C 코딩에 아직 익숙하지 않으신 분들을 위해 설명을 드리자면 '/'는 나누기 연산자로 int형 변수에 사용 시 나눈 몫이, '%'는 나머지 연산자로 int형 변수에 사용 시 나눈 나머지가 저장됩니다.
한수 판별의 조건인 등차수열을 만족하는지는 각 자릿수의 차이를 직접 비교하여 구합니다. 같은 값(등차수열의 공차)이면 되므로 절댓값을 비교할 필요가 없으니 차이 값을 직접 비교하면 됩니다. 즉, checkMatch함수가 참으로 리턴하는 조건은 세 자릿수 미만의 수 또는(OR) 각 자리 수의 차이가 같은 수입니다.
728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
11866번 요세푸스 문제 0 / Baekjoon BOJ 백준 11866 C++ 코드, 해설, 풀이 (0) 2020.12.22 8958번 OX퀴즈 / Baekjoon BOJ 백준 8958 C++ 코드, 해설, 풀이 (0) 2020.12.02 3986번 좋은 단어 / Baekjoon BOJ 백준 3986 C++ 코드, 해설, 풀이 (0) 2020.12.02 1924번 2007년 / Baekjoon BOJ 백준 1924 C++ 코드, 해설, 풀이 (0) 2020.09.27 5543번 상근날드 / Baekjoon BOJ 백준 5543 C++ 코드, 해설, 풀이 (0) 2020.09.04