백준 알고리즘 1731번 추론문제입니다.

(참고 - https://www.acmicpc.net/problem/1731 )



코드)

#include <stdio.h>

int arr[50], temp[50], temp2[50];

int main() {

int N, i;

scanf("%d", &N);

for(i=0; i<N; i++) {

scanf("%d", &arr[i]);

}

for(i=0; i<N; i++) {

temp[i] = arr[i+1] - arr[i];

temp2[i] = arr[i+1] / arr[i];

}

for(i=0; i<N; i++) {

if(temp[i] == temp[i+1]) { //등차

printf("%d\n", arr[N-1]+temp[0]);

break;

}

if(temp2[i] == temp2[i+1]) { //등비

printf("%d\n", arr[N-1]*temp2[0]);

break;

}

}

return 0;

}


- 백준 알고리즘 문제들은 항상 느끼는 것이지만, 문제를 제대로 읽지 않으면 시간초과 혹은 틀렸습니다. 를 접하게 되는것같습니다. 반드시 문제에서 주는 조건들을 유심히보시고 소홀히 하지 않으시기 바랍니다.

이번 문제는 첫째 줄에 입력받을 N의 갯수가 0~50으로 제한됩니다. 따라서 배열의 크기는 50이상으로 잡아주어야 합니다.

이후 arr배열에 값들을 입력받아 저장하도록 하고, temp라는 배열에는 등차수열의 공식을 적용하고 temp2라는 배열에는 등비수열의 공식을 적용하여 각각 저장해줍니다. 그 후, if문을 두 가지 케이스로 넣어서 arr에 저장되어있는 값이 등차인지 등비인지를 구분하도록 나눠주었습니다.

두 케이스를 나눠 준 뒤, 

만약 등차라면 기존 arr[N-1]에 저장된 마지막 값에 공차값(temp[0])을 더해줌으로써 다음 값을 도출해낼 수 있고,

등비라면 arr[N-1]에 저장된 마지막 값에 공비값(temp2[0])을 곱해줌으로써 다음 값을 도출합니다.


WRITTEN BY
SiriusJ

,