Home [C언어] 코드업 1091 : 수 나열하기3
Post
Cancel

[C언어] 코드업 1091 : 수 나열하기3

Problem

https://codeup.kr/problem.php?id=1091

Solution

오답코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int fibo(int a, int m, int d, int n)
{
    if (n==1)
        return a;
    else
        return fibo(a, m, d, n-1)*m+d;
}

int main()
{
    int a, m, d, n;
    scanf("%d%d%d%d",&a,&m,&d,&n);
    printf("%d",fibo(a, m, d, n));
}

처음 이 문제를 풀었을 때는 각 변수의 조건 (a, m, d는 -50 ~ +50, n은 10이하의 자연수)을 크게 신경쓰지 않았다. 그랬더니 테스트케이스로 -50 50 -50 10이 입력되었을 때 원래 정답인 -99649234693877550이 나오는 대신 -1947299630이 나와 오답처리 되었다. 따라서 fibo함수의 반환형을 long long형으로 바꿔주었다.

정답코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

long long fibo(int a, int m, int d, int n)
{
    if (n==1)
        return a;
    else
        return fibo(a, m, d, n-1)*m+d;
}

int main()
{
    int a, m, d, n;
    scanf("%d%d%d%d",&a,&m,&d,&n);
    printf("%lld",fibo(a, m, d, n));
}

이렇게 바꾸니 정답처리가 되었다.

Memo

이 문제를 for문으로 처리할 수도 있었지만 함수를 따로 빼서 피보나치형태로 처리해보았다. 수열의 순서를 나타내는 n이 1일때 a를 return하는 식으로 피보나치 함수를 실행시키면 n번째 수를 구할 수 있다. for문으로 해결한다면 아래와 같이 해결할 수 있을 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main()
{
    int a, m, d, n;
    long long res = 0;

    scanf("%d%d%d%d",&a, &m, &d, &n);

    for (int i=0; i<n; i++)
        res = res * m + d;

    printf("%lld", res);
}
This post is licensed under CC BY 4.0 by the author.

Django 웹 개발 : 게시판 만들기 (2)

[Python] 백준 4673번 : 셀프 넘버