[boj] c언어 - 8393번(합)

peepeep_q·2022년 3월 20일
0
post-thumbnail

문제

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.

출력

1부터 n까지 합을 출력한다.

풀이

내가 시도한 잘못된 방법_1

#include <stdio.h>
int main()
{
  int n; //입력할 변수 선언
  scanf("%d", &n); //입력받기
  for(int i=0; i<=n; i++)
    {
      printf("%d\n",n+i);
    }
  return 0;
}

시도_1의 문제점

:입력받은 n에 i의 0부터 n까지 더해져서
n+0
n+1
n+2
...
n+n
으로 출력이 된다.

-> 접근 생각이 잘못 되었다. n에 i를 더하는 방법이 아니라 i끼리 더해져야 한다.

내가 시도한 잘못된 방법_2

#include <stdio.h>
int main()
{
  int n; //입력할 변수 선언
  scanf("%d", &n); //입력받기
  for(int i=0; i<=n; i++)
    {
      printf("%d\n",i+i);
    }
  return 0;
} 

시도_2의 문제점

: i끼리 더해지는데 0+0, 1+1, 2+2 ... 이런식으로 더해진다. 이게 아니라 i의 첫번째부터 n번째까지 더해야 한다.

-> 난 여기서 배열을 만들어 i의 첫번째부터 n번째까지 배열에 넣어줘서 각각 더하는 방법을 생각했었다. (물론 잘못됨.)

내가 시도한 잘못된 방법_3

#include <stdio.h>
int main()
{
  int n; //입력할 변수 선언
  scanf("%d", &n); //입력받기
  int N[n];
  for(int i=0; i<=n; i++)
    {
      printf("%d\n",N[0]+N[i]);
    }
  return 0;
}

시도_3의 문제점

: n을 입력하면 (n+1)개의 0이 출력된다...

-> 사실 배열 자체를 잘 몰라서 이제 뭐가 잘못된건지도.. 구분이 안갔다. 그래도 내가 너무 어렵게 돌아가는 듯한 느낌은 들어서 다시 간단하게 생각해보자! 하고 내가 놓친 것들을 생각했다.

<나의 문제점: i끼리 더하는 방법>

  • for문 안에for문을 넣는다 -> 실패
  • 배열을 만들어서 더한다 -> 실패
  • 새로운 변수를 선언하여 그 자리에 i를 차례로 넣어주며 더한다 -> 정답!

    내가 놓친것: 더해질 때 새로 그 값을 넣어줄 변수를 선언하지 않음.

소스코드

#include <stdio.h>
int main()
{
  int n; //변수 n 선언
  scanf("%d",&n); //n입력받기
  int sum=0; //결과를 나타내 줄 변수 선언
  for(int i=0; i<=n; i++)
    {
      sum+=i; //sum에 0부터 n까지의 값이 더해짐
    }
  printf("%d",sum); //sum값 출력
  return 0;
  }

메모

i끼리 더하고 싶을 때는 새로운 변수를 선언하고 그 변수안에 i를 차례로 넣어주자.
sum은 0으로 초기화 필수다. -> 쓰레기 값이 들어있을 수 있으므로!
그럼 n은 왜 초기화하지 않나? -> n은 사용자로부터 입력받는 변수니깐..?(내가 생각한거)

간단한 문제였지만 나한텐 진짜 오래걸리고 완전 돌아가는 문제였다.. 결국 너무 안풀리고 어떻게 하는지 방법 자체를 몰라서 구글링의 도움을 조금 받긴 했지만, 여러모로 많이 배울 수 있는 문제였던 거 같다.

0개의 댓글

관련 채용 정보