[백준] 11720번. 숫자의 합
https://www.acmicpc.net/problem/11720
C++ 풀이
1. string의 at()함수 또는 []연산자
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n; // 숫자의 개수
string str;
cin >> str; // 문자열로 입력 받기
int sum = 0;
for (int i = 0; i < n; i++) { // n개까지만 더하기
sum += str.at(i) - 48; // at() 함수는 인덱스 범위 체크하지만, 속도 느림.
//sum += str[i] - 48; // [] 연산자는 인덱스 범위 체크하지 않지만, 속도 빠름.
}
cout << sum;
return 0;
}
- str.at()은 입력의 범위를 확인해서 문자열의 범위를 벗어나는 인덱스를 접근하려 들면 out of range 예외를 발생시킵니다.
- str[]은 범위 체크가 없습니다. 범위를 벗어나는 인덱스에 접근은 가능하지만 undefined behaviour이며 어떤 값이 들어있을지 알 수 없습니다.
2. char형 배열
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
char* arr = new char[n];
int sum = 0;
for (int i = 0; i < n; i++) {
// char형은 딱 한 문자씩만 입력 받는다!
cin >> arr[i];
sum += arr[i] - 48; // char형 '0' == 십진수 48
}
cout << sum;
delete[] arr;
return 0;
}
파이썬 풀이
https://ooyoung.tistory.com/67
https://velog.io/@kchs94/파이썬-11720번숫자의합
1. map 함수 이용
n = input()
print(sum(map(int,input())))
# map 함수를 이용해 각 자리의 문자를 int로 변환하고, 전부 더하기
# 그런데 이 방법은 입력값 n을 사용하지 않기 때문에
# 더하는 숫자의 개수가 n개가 아닐 수 있다.
2. for ch in string
n = input()
string = input()
sum = 0
for ch in string:
sum += int(ch) # 문자를 정수로 변환해서 더하기
print(sum)
# 이 방법도 입력값 n을 사용하지 않기 때문에 더하는 숫자의 개수가 n개가 아닐 수 있다.
3. for i in range(n)
n = int(input()) # range 함수의 인자로 쓰일 n은 숫자여야 함. (int로 변환 필수)
string = input()
sum = 0
for i in range(n): # 0부터 n-1까지
sum += int(string[i]) # 문자를 정수로 변환해서 더하기
print(sum)
Author And Source
이 문제에 관하여([백준] 11720번. 숫자의 합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jxlhe46/백준-11720번.-숫자의-합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)