백준 1065번 함수 마지막 문제 by 꽁치


어려운.. 함수 마지막 문제답게 이것도 푸는데만 하루종일 걸렸다. 

<한수구하기>

한수 = 각 자릿수가 등차수열을 이루는 수 
여기서 한자릿수, 두자릿수까지는 등차수열을 판단할 척도가 없어 그냥 한수라고 한댄다.
난 그것도 모르고 일단 생각한 알고리즘 대로 코드를 작성했다. 다음 코드는 내가 처음 생각했던 알고리즘. 
함수 2개 만들어서 하나는 메인, 하나는 한수까지 구해내는 함수인 solution();.
수 n을 입력받으면 메인에서 1부터 n까지 반복돌리고, solution에서 각 자릿수를 빼내는 연산 후 배열에 집어넣었다. 그래서 배열에는

arr[0] = 일의자리수
arr [1] = 십의자리수 
arr[2]= 백의 자리수 이렇게 할당하고, 등차수열 식인 Ak = a1+(k-1)d 를 배열식으로 풀어내 if 함수에 넣었음. for문 돌려 배열 하나하나 d가 일치하는 지에 대해  검수했었다. 이 알고리즘도 맞는 것 같지만 내가 만든 raw한 코드라 그런지 다시 고쳐서 저지받고싶진 않았다. 그래서 걍 블로그에 올림. 

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
using namespace std;

int solution(int n){
int count = 98;
int m = 0;
int arr[6] = {};
int diff =0;
for(int i=0;i<6;i++){
arr[i] = n%10;
n = n/10;
if(n < 10){
arr[i+1] = n;
m = i+1;
break;
}

}
for(int k=0;k< 6;k++){
if(arr[k+2]- arr[k+1] == arr[k+1]-arr[k]){
count++;
}
}
return count;

}
int main(){
int a;
int num1 = 0;
scanf("%d", &a);
for(int i=100;i<a;i++){
num1 = solution(i+1);
}
printf("%d",num1);
}


다음은 유튜브 영상 보고 거의 따라 적은 코드 > https://www.youtube.com/watch?v=RmbXOSOpvxQ 이 분 잘가르치신다. 

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
using namespace std;

int solution(int n){
int count = 98;
int m = 0;
int arr[6] = {};
int diff =0;
for(int i=0;i<6;i++){
arr[i] = n%10;
n = n/10;
if(n < 10){
arr[i+1] = n;
m = i+1;
break;
}

}
for(int k=0;k< 6;k++){
if(arr[k+2]- arr[k+1] == arr[k+1]-arr[k]){
count++;
}
}
return count;

}
int main(){
int a;
int num1 = 0;
scanf("%d", &a);
for(int i=100;i<a;i++){
num1 = solution(i+1);
}
printf("%d",num1);
}


자꾸 오른쪽걸 왼쪽에 할당한다는 것을 까먹고 b = s;이라 해서 자꾸 틀렸습니다 나와서 짜증났음 .. 
결국엔 맞았습니다 받고.. 블로그 쓰고 끗.  
어짜피.. 오늘은 쉬엄쉬엄 하려고 했엇다.. 갓생을 살지 않으려 다짐했었다. (김효주 증인) 

덧글

댓글 입력 영역