반응형
Notice
Recent Posts
Recent Comments
Link
«   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
Archives
Today
Total
05-18 06:40
관리 메뉴

ImJay

[C언어] 백준 11720번 : 숫자의 합 본문

백준 - C, C++/07. 문자열

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

ImJay 2020. 10. 12. 00:01
반응형

백준 11720번 : 숫자의 합

- 사용언어 : C언어

www.acmicpc.net/problem/11720

1. 문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

2. 코드

#include <stdio.h>

int main(void) {
    
    int n, sum=0;
    
    scanf("%d", &n);
    
    char num[n];
    
    scanf("%s", num);
    
    for(int i=0; i<n; i++) sum += num[i] - '0';
    
    printf("%d", sum);
}

3. 풀이

문자열은 배열을 통해 받습니다.

 

%s를 사용하고, for문을 안써도 됩니다. &도 붙지 않구요.

 

자세한 내용은 blog.naver.com/1stwook/30178894184

 

문자열을 저장하는 문자배열(문자배열의 선언과 사용)

앞전에는 숫자를 저장하기 위한 배열을 중심으로 살펴보았는데요.숫자를 저장하는 배열이 가능하면... 당연...

blog.naver.com

 

코드 작성시 드는 의문은, 분명 숫자를 입력 받았어도, 형식은 문자열인데

 

문자열끼리 사칙연산이 가능할까?

 

답은 가능하다.

 

우리가 앞에서 아스키코드를 배운 이유가 벌써부터 여기서 설명된다.

 

develop247.tistory.com/21

예를 들어보자.

 

우리가 입력을 12를 받았다.

 

우리가 원하는 출력은 3 (1+2) 이다.

 

문자열 1은 아스키코드로 49이다.

 

문자열 2는 아스키코드로 50이다.

 

다시 말해, 문자열 1과 2는 %s로 출력하면 1,2 이고, %d로 출력하면 49, 50이다.

 

즉, 우리가 이 것을 정수형으로 계산한다면

 

문자열 1 + 문자열 2 = 49 + 50 = 99 이다.

 

그렇다면 우리가 원하는 출력을 위해선?

 

문자열 0으로 빼주면 된다.

 

문자열 0의 아스키코드는 48이다.

 

for(int i=0; i<n; i++) sum += num[i] - '0';

 

* '0' -> 문자열 0의 표현

 

num[i]에서 문자열 0을 빼준다의 의미는,

 

만약 num[0]이 문자열 1이라면 num[0]은 49이고,

 

여기서 문자열 0을 빼주면 49 - 48 = 1

 

우리가 원하는 값으로 출력할 수 있다.

 

우리가 원하는 문자열 1 더하기 문자열 2는

 

( 49 - 48 ) + ( 50 - 48 ) = 3

 

아스키코드는 이런식으로 활용할 수 있다.

 

 

반응형
Comments