프로그래밍/백준

4. 백준 15596 정수 n개의 합 구하기 (문제를 잘 읽자,사용자정의함수배열)- c언어

량아이 2022. 7. 16. 00:39

처음 이 문제를 봤을때 이해가 전혀 되지 않았다.

보통 문제로 바로 해결방법을 알아차리기 보단 예제 입력 & 출력을 보고 문제를 파악하는 편인데 이번 문제에선 그런게 전혀 나오지 않았다.

그러는 와중에 이 단계의 다른 문제들은 이미 성공이라고 되어있기에 어떤 형식의 문제인가 싶어 봤더니....

기초 문법떼기 리스트에서 가장 마지막에 있던 문제이자 가장 애를 먹었었던 셀프넘버가 그밑에 있었다.......

이를 발견함과 동시에 정말, 매우, 자신감이 떨어졌지만 일단 부딪쳐보기로 했다.

예제 입력이 어떻게 되는지도 모르겠고 감이 아예 안잡히지만 일단 무작정 코드를 써보기로 했는데

#include <stdio.h>
int main(){
    long long n, hap=0;
    while(scanf("%lld",&n) ==1){
        hap+=n;
    }
    printf("%lld",hap);
}

개같이 멸망ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이게 아닌거같으니 일단 문제를 차근차근 읽어보았다.

 

C, C11, C (Clang), C11 (Clang): long long sum(int *a, int n);
a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
n: 합을 구해야 하는 정수의 개수
리턴값: a에 포함되어 있는 정수 n개의 합

일단 나는 함수를 별로 써본적 없기 때문에 좀 애를 먹겠지만 한번 시도는 해보기로 했다.

문제를 천천히 읽으니 뭔가 감이 잡히는거 같기도...?

 

이후로....

#include <stdio.h>
void sum(int *a, int n){ //이게 되네;;;
    long long hap=0;
    for(int i=0;i<n;i++){
        hap+=a[i]; //배열의 수 다 더하기
    }
    printf("%lld", hap);
}
int main(){
    int n;
    scanf("%d",&n);//정수의 개수 n을 받는다
    int a[n];
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);//n개만큼 배열을 받는다
    }
    sum(a,n);
}

배열을 사용자 정의 함수로 어떻게 옮기나 고민했었지만 백준에 나온대로 *a를 쓰니 결과는 정상적이게 나왔다.

하지만 컴파일 에러

 

처음 언어입력시 이미 적혀져 있는

#include <vector>
long long sum(std::vector<int> &a) {
	long long ans = 0;
	return ans;
}

이것을 반드시 써야하는 것인가 해서 이것도 넣어서 만들었더니

#include <stdio.h>
long long sum(int *a, int n) {
    long long ans = 0;
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        ans+=a[i];
    }
    return ans;
}
int main(){
    int su;
    scanf("%d",&su);
    int b[su];
    printf("%lld",sum(b,su));
}

ㅎ컴파일 에러

 

컴파일 에러 문장을 구글에 쳐보니 같은 문제에 해메고 있는 사람이 있길래 봤더니 그분은 main을 지우니 해결됐다고 한다.

그래서 나도 메인을 지워서 다시 돌려봤으나.....

#include <stdio.h>
long long sum(int *a, int n) {
    long long ans = 0;
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        ans+=a[i];
    }
    return ans;
}

시간초과.......

아니 왜!!!!!!!!!!!!!!!!!!

결국 나는 백준에 패배하였고 구글신에게 여쭙기로 했다.

그리고 다른 블로그에서 비로소 15596의 문제를 제대로 읽게 되었으니....

정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.

n개의 합을 구하는 함수를 작성하시오.

'함수'를 작성하시오.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

온갖 개고생을 다 하고서야 입력과 출력이 안나와있는 이유를 알게되었다

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

문제를 잘 읽자

하....스트레스......

 

애초에 메인 코드는 이미 작성이 된 상태였고 나는 그냥 함수만 작성하는 매우. 간.단.하.고 심플한 그런 문제였다.

 

그래도 사용자 정의 함수에서 배열 사용방식은 알게 됐으니 그것으로 충분하다고 생각한다.

 

오늘의 교훈

1.문제를 잘 읽자.

2.메인의 값을 사용자 정의 함수로 옮길때 

함수(*a){
printf("%d",a[10]);
...}
int main(){
int bea[10];
함수(bea);
}

이런식으로 사용 가능하다.