[C++] 백준 1065 한수
반응형
https://www.acmicpc.net/problem/1065
1. 서론
백준에서 풀려고 했지만 실패한 문제에서 발견한 문제! 4년 전에... 그러니까 3학년? 일 때인가? 여하튼 그때 뭔 문제도 제대로 이해하지 못한 듯한 기상천외한 방법으로 트라이한 흔적이 있어서 뭔데 못 풀었지? 하고 푼 문제 브루트 포스고 진짜 쉬움;
2. 문제 풀이
어떤 수 N이 주어진다. 그 수를 1~N까지 보면서 각자리가 등차수열인 수는 몇 개인지를 구하는 문제이다.
예를 들어 123이라는 숫자가 있으면 1 2 3 각각 1씩 차이가 나는 등차수열이므로 이 문제에서 말하는 '한수'인 것이다.
이 문제의 포인트는 입력받은 숫자를 자릿수 별로 비교하는 것이다. 나는 정수를 문자열로 바꿔서 각각 배열에 자릿수 별로 넣어준 뒤 숫자로 변환해 등차수열인지 아닌지를 구해줬다. 등차수열인지 아닌지는 두 번째 자릿수와 첫 번째 자릿수를 빼서 저장해놓고 그 뒤로도 배열이 끝날 때까지 두 숫자를 빼고 비교하면서 이 값과 같은지 아닌지를 판별하게 했다. 그래서 등차수열이면 cnt 하도록 했다.
3. 코드 설명
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
int i, j, n, cnt = 0, t, f;
string s;
cin >> n;
for (i = 1; i <= n; i++)
{
vector<int> v;
s = to_string(i);
for (j = 0; j < s.size(); j++)
v.push_back(s[j] - '0');
t = v[1] - v[0], f = 0;
for (j = 2; j < v.size(); j++)
if (v[j] - v[j - 1] != t)
f = 1;
if (f == 0) cnt++;
}
cout << cnt << endl;
}
처음에는 f를 써서 등차수열인지 판별하는 부분을 bool형식 함수로 따로 빼서 해줬었는데 그냥 그렇게 복잡한 로직도 아니고 다시 메인 함수에 넣어줬다 ㅎㅎ
반응형
'Algorithm' 카테고리의 다른 글
[C++] 백준 9095 1, 2, 3 더하기 (0) | 2022.06.03 |
---|---|
[C++] 백준 10974 모든 순열 (0) | 2022.06.02 |
[C++] 백준 21610 마법사 상어와 비바라기 (1) | 2022.05.01 |
[C++] 프로그래머스 네트워크 (0) | 2022.04.21 |
[C++] 프로그래머스 전력망을 둘로 나누기 (0) | 2022.03.25 |