티스토리 뷰

반응형



이번 포스팅은 백준 알고리즘 사이트의 11720번 숫자의 합 문제를 C언어로 코딩해보겠습니다. 아래 url로 접속하시면 문제를 볼 수 있습니다.


https://www.acmicpc.net/problem/11720


지난 백준 알고리즘 포스팅과 같은 단계로 for문 사용해보기 단계의 문제입니다.



이 문제의 경우 사용자로부터 N을 입력받고, 입력 받은 N 갯수만큼의 수를 입력받아 그 수들의 합을 구하는 문제입니다.


더할 수를 입력 할 때 어떤 방법을 사용해서 입력을 받고 더할지 생각해보시면 도움이 될 것 같습니다.


1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
void main() {
    int input, i, sum = 0;
    char inArr[101= {};
    scanf("%d"&input);
    scanf("%s", inArr);
    
    for(i = 0; i < input; i++)
        sum += inArr[i] - 48;
    printf("%d", sum);
}
cs



먼저 입력받고 싶은 수의 갯수를 받을 input변수와, input 값만큼 입력 받을 배열 inArr를 "char 형"으로 선언해줍니다.

inArr를 왜 int형이 아닌 char형으로 지정했는지는 아래에서 설명하도록 하겠습니다.


inArr 배열의 값을 모두 더할 수 있는 변수 sum과 for문을 위한 변수 i를 지정해 준 후, input과 inArr를 사용자로부터 입력받아 줍니다.


for문을 이용해 1부터 입력받은 input까지 1씩 증가하는 조건을 지정해주고 sum에 inArr[i] - 48값을 더해줍니다.


여기서 더해주는 48은 ASCII값과 관련된 것인데 설명하기 앞서 아래의 표를 먼저 보시면 좋을 것 같습니다.


(출처 : https://easytechnow.com/learn-technology/what-is-ascii-code/)


코드를 작성할 때 더할 수를 받는 배열인 inArr를 int형이 아닌 char형으로 지정하였는데, 이는 수를 입력 받을 때 공백 문자나 띄어쓰기 없이 입력을 받도록 하기 위함이였습니다.


inArr에 들어가는 것이 수가 아닌 문자로써, 문자열을 더하면 수를 더하는 것과는 다른 값을 반환하기에 문자형 입력을 숫자형으로 바꾸기 위해 ASCII 값을 이용합니다.


ASCII Table을 참고하시면 문자 '1' ASCII 코드로 49를 의미하고, 숫자 1은 ASCII 코드로 1을 의미합니다.


그렇기에 우리가 원하는 숫자 1을 구하기 위해서는 문자열에서 48이라는 값을 뺴주면 되기에 코드에 inArr[i] - 48이라는 코드를 작성해주었습니다.


이렇게 변환해준 수의 값을 모두 더해 sum 변수에 넣어주면 문제를 해결할 수 있게 됩니다.



코드 자체는 어려운 코드가 없었지만, 연속된 수를 어떻게 나누고 더할지에 대한 고민을 해야하는 문제입니다.


ASCII를 이용하는 것에 대해 생각해보시면 좋을 것 같습니다.



다음 포스팅에서는 다음 단계의 코드를 보도록 하겠습니다.


다음 포스팅에서 봐요 :))

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함