https://www.acmicpc.net/problem/1065
1065번 문제 한수
실력이 없는 나에게는 너무 어려운 문제였다.
두시간 짜리 사지방 연등 시간을 이틀이나 쏟아부어 겨우 풀었다.
이 문제를 풀기위해 가장 먼저 생각해야 할것은 100이하의 수는 모두 한수라는 것이다.
FindFunc함수에서는 100과 입력받은 숫자 사이의 한수를 찾을때마다 리턴값을 99에서 1씩 더해준다.
그 과정에서 100부터 입력받은 숫자까지 반복문을 사용하여 각 숫자들이 한수인지 아닌지 판별한다
한수 판별과정
1. 각 숫자를 자릿수마다 나누어 numList에 각각 넣어준다. Ex) 134 → [1] [3] [4]
2. 각 자릿수의 차이가 같은지 확인하여 같으면 Bool 변수인 isTrue → true / 다르면 isTrue → false
3. isTrue가 true일때 리턴값에 1을 더해줌.
<< Code >>
#include <iostream>
using namespace std;
int FindFunc(int num){
if (num < 100) {
return num; // 100보다 작은 수의 경우 모두 한수이기 때문
}
int result = 99;
for (int i = 100; i <= num; ++i){
int share = 0; // List의 크기 알기위해 자릿수를 구함
int temp = i;
while(temp > 0) {
share++;
temp /= 10;
} // 자릿수를 구하는 과정
int* numList = new int[share]; // 자리마다 쪼개서 넣어줄 리스트 생성
temp = i;
for(int j = 0; j <= share; ++j) { // 각 자리마다 쪼개서 동적배열에 넣어줌
numList[j] = temp % 10;
temp /= 10;
}
bool isTrue= true; //한수가 아니라면 false로 바뀌는 변수
for (int k =0; k < share-2; ++k) {
if (numList[k]-numList[k+1] != numList[k+1]-numList[k+2]){
isTrue = false;
}
else {continue;}
}
if (isTrue == true){
result++;
}
//확인을 위한 코드
//cout << "T/F: " << isTrue << "\nNum: "<<i <<"\n";
delete[] numList;
}
return result;
}
int main(){
int num;
cin >> num;
cout << FindFunc(num) << "\n";
}
<< 내 GitHub >>
https://github.com/J2on/BaekjoonOnlineJudge/blob/master/Code/BaekJoon_1065.cpp
< 백준 BaekJoon : 4344번 평균은 넘겠지 > C++ (0) | 2021.09.25 |
---|---|
< 백준 BaekJoon : 8958번 OX퀴즈 > C++ (0) | 2021.09.25 |
< 백준 BaekJoon : 3052번 나머지 > C++ (0) | 2021.09.19 |
< 백준 BaekJoon : 1546번 평균 > C++ (0) | 2021.09.19 |
< 백준 BaekJoon : 2577번 숫자의 개수 > C++ (0) | 2021.09.19 |
댓글 영역