문제
- N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
입력
- 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
출력
- 입력으로 주어진 숫자 N개의 합을 출력한다.
입출력 예제
아스키 코드 연산하기
코드
1
2
3
4
5
6
|
String str = "12";
char first = str.charAt(0);
char second = str.charAt(1);
System.out.println("first : " + first);
System.out.println("second : " + second);
System.out.println("first + second = " + (first + second) );
|
cs |
출력
위의 first 와 second를 더하면 1+2 일텐데 답은 99가 나온다.
처음에는 너무 헷갈릴 수 있는데 사실 이부분은 자바에서 자동 형변환을 하기 때문에 일어나는 일이다.
사실 가장 마지막에 first + second 는 문자기 때문에 int로 자동 형변환을 한다. 그래서 사실은
(int)first + (int)second) 이렇게 연산이 일어나는데 이때 first와 second는 문자 이기 때문에 문자를 숫자로 변환하면 아스키코드에 맞게 변환이 된다. 아스키코드 표를보면 문자 '1' 은 49, '2' 는 50 이다. 그렇기 때문에 실제 연산은 49+50 으로 일어나기 때문에 90이 나온다. 이 부분이 눈으로 보이지 않는다면 코드를 조금 바꿔서 다시 확인해 보자.
코드
1
2
3
4
5
6
|
String str = "12";
char first = str.charAt(0);
char second = str.charAt(1);
System.out.println("first : " + (int)first);
System.out.println("second : " + (int)second);
System.out.println("first + second = " + ((int)first + (int)second) );
|
cs |
출력
first와 second를 출력할 때 (int)로 현변환을 하니까 이제서야 확실하게 보인다.
이제 문자를 우리가 원하는 숫자로 바꿔주면 된다.
first = '1' 에서 '1'은 49이고 우리가 원하는 숫자 1을 만들려면 49 - 48을 하면된다. second = '2' 에서 '2'는 50이고 우리가 원하는 숫자 2를 만들려면 50 - 48을 하면된다.그럼 모든 문자에 - 48을 하면 원하는 답을 얻을 수 있다. ( '0' 이 아스키코드 48 이기 때문에 -'0' 을 해도 된다.)
코드
1
2
3
4
5
6
|
String str = "12";
char first = str.charAt(0);
char second = str.charAt(1);
System.out.println("first : " + (int)(first-48));
System.out.println("second : " + (int)(second-'0'));
System.out.println("first + second = " + ((int)(first-48) + (int)(second-'0')) );
|
cs |
출력
설명
- Stirng numberStr 에 입력된 숫자들을 문자열로 받는다.
- 숫자의 개수 n 만큼 반복하면서 가장 앞에서 부터 순서대로 result에 더하고 출력하면 된다. ( charAt()의 결과는 문자이고 해당 문자를 계산하기 위해서 int 형변환 될때 아스키 코드로 변환이 된다. 그렇기 때문에 - '0' 를 넣었다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Level07_02 {
// 11720번 - 숫자의 합
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.valueOf(br.readLine());
String numberStr = br.readLine();
int result = 0;
for(int i=0; i<n; i++) result += ( numberStr.charAt(i) - '0');
System.out.println(result);
}
}
|
cs |
'Algorithm > Baekjoon' 카테고리의 다른 글
백준(2675번) - 문자열 반복 (0) | 2021.07.22 |
---|---|
백준(10809) - 알파벳 찾기 (0) | 2021.07.19 |
백준(11654번) - 아스키 코드 (0) | 2021.07.18 |
백준(1065번) - 한수 (0) | 2021.07.17 |
백준(4673번) - 셀프넘버 (0) | 2021.07.15 |