반응형
DoZZang
Do IT
DoZZang
전체 방문자
오늘
어제
  • Programming
    • Git
    • Web
    • 기타
    • Python
      • CodeUp
    • Math
    • Algorithm
    • Baekjoon
    • C,C++
    • Life
      • 독서
      • Just
      • 영화

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DoZZang

Do IT

[C] 백준 11720번 : 숫자의 합
Baekjoon

[C] 백준 11720번 : 숫자의 합

2023. 1. 14. 21:44
반응형

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

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>

    int main() {
        int n = 0, sum = 0, i = 0;
        char a[100];
        scanf("%d", &n);
        scanf("%s", a);

        while (a[i] != 0) {
            sum += (a[i] - '0');
            i++;
        }
        printf("%d", sum);
        return 0;
    }

풀이 전

이 문제를 보자마자 아스키코드와 관련된 문제겠거니 했다.

 

아스키코드란?

컴퓨터는 오로지 숫자만 표현할 수 있을 뿐 글자(문자)를 표현할 수 없었다.

따라서 대안으로 특정 숫자를 문자로 규정하기로 하였는데 이를 '부호체계'라고 한다.

과거에는 부호체계가 컴퓨터 제조사마다 달랐지만 하나로 통일 된것이 ASCII코드이다.

+7비트로 문자를 표현하는 코드체계였으나 여기에 확장 비트를 하나 더해 8비트로 표현된다.

영문 한 글자를 저장할 수 있는 메모리의 크기가 8비트(1Byte)인 이유도 이 때문이다.

 

N개의 숫자가 공백없이 쓰여져있기 때문에 int자료형 배열을 선언하여 초기화한다면

어차피 원소의 수는 하나일 것이다.

물론 초기화 된 값을 각 자리수를 나누어 각각 더한다면 될 수 있을 지 몰라도 굉장히 비효율적이고

첫 줄에 숫자의 개수가 주어지는 문제의 취지와도 맞지 않다.

따라서 char자료형 배열이 선언되어야하는데

이유는 char자료형 배열은

ex)char a[4] = {'a','b','c'}

a[0] = a a[1] = b a[2] = c a[3] = NULL(0,'\0')으로 구성되기 때문이다!

그렇다면 위에서 기술한 아스키코드와 위 예제를 접목시켜보면

각각의 문자는 ASCII코드에 의해 특정 숫자에 대응할 것이다.https://www.easycalculation.com/ascii-hex.php

 

String to ASCII chart, ASCII to decimal convertor, String to decimal converter, string hexadecimal / hex conversion

 

www.easycalculation.com

 

위 사이트를 통해 대응시켜볼 수 있다.

종합해보면

아 그럼 두번째 줄에 숫자를 입력하면 각각의 char 문자열 원소에 대응하겠구나를 알 수 있다.

그렇게 문자끼리 덧셈연산을 수행하여 int자료형으로 출력하면

아스키코드에 대응되는 수가 나오게 되는데

위 문제에서는 한 자리 수의 덧셈이기 때문에 덧셈연산이 한 번 수행될 때마다 0에 해당하는 아스키 코드 값을 뺄셈해주면 된다.

(0~9까지는 1씩 증가하는 아스키코드 값을 가지고 있기 때문이다. 0은 48)

 

풀이 후

문자열에 대한 기초 중에 기초를 복합적으로 확인할 수 있었다.

반응형
저작자표시 (새창열림)

'Baekjoon' 카테고리의 다른 글

[C] 백준 2675번 : 문자열 반복  (0) 2023.01.15
[C] 백준 10809번 : 알파벳 찾기  (0) 2023.01.15
[C] 백준 10951번 : A + B - 4  (2) 2023.01.13
[C] 백준 9498번 : 시험 성적  (0) 2023.01.11
[C] 백준 5597번 : 과제 안 내신 분..?  (0) 2023.01.11
    'Baekjoon' 카테고리의 다른 글
    • [C] 백준 2675번 : 문자열 반복
    • [C] 백준 10809번 : 알파벳 찾기
    • [C] 백준 10951번 : A + B - 4
    • [C] 백준 9498번 : 시험 성적
    DoZZang
    DoZZang
    과정은 힘들지만 성장은 즐겁습니다.

    티스토리툴바