[백준] 11720번. 숫자의 합

leeeha·2021년 9월 29일
0

백준

목록 보기
7/185

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)
profile
Keep Going!

0개의 댓글