문제 이름 : 숫자의 합
문제
N
개의 숫자가 공백 없이 쓰여있다.
이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 숫자의 개수 N
( 1 <= N
<= 100 ) 가 주어진다.
둘째 줄에 숫자 N
개가 공백없이 주어진다.
출력
입력으로 주어진 숫자 N
개의 합을 출력한다.
예제 입력 1
1
1
예제 출력 1
1
예제 입력 2
5
54321
예제 출력 2
15
예제 입력 3
25
7000000000000000000000000
예제 출력 3
7
예제 입력 4
11
10987654321
예제 출력 4
46
이 문제는 입력으로 주어질 문자열의 길이 를 친절하게 주었다.
하지만, String
즉 문자열 클래스와의 메서드와 친해지기 위해서는,
직접 알아내고 사용하는 것도 실력 향상에 좋다.
맨 처음 입력으로 주어지는 길이 N
을 무시하고,
그 다음 줄에 입력으로 주어지는 문자열을 이용하여 길이를 알아보자.
문자열의 길이를 알기 위해서는, String.length()
메서드를 사용하면 된다.
즉, 우리가 문자 하나하나를 꺼내기 위한 반복을 위의 길이만큼 반복하면 된다는 의미이다.
하지만, 우리는 문자로 된 수 를 어떻게 정수로 변환할 것인가?
여기서 우리는 2 가지 방식을 선택 할 수 있다.
Character
클래스에서 제공하는 문자 --> 숫자 메서드- 직접 따로 메서드를 생성하여 변환하기
Answer 1 - Character 클래스 사용
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 편의성을 위한 길이는 그 다음 문자열 데이터로 추출 할 수 있다.
br.readLine();
String str = br.readLine();
int sum = 0;
for (int i = 0; i < str.length(); i++) {
char chNum = str.charAt(i);
sum += Character.getNumericValue(chNum);
}
System.out.println(sum);
}
}
위의 코드에서 사용한 방식은 Character
라는 char
의 포장 클래스 형식인데,
char
이라는 단순 바이트 형식의 데이터가 아니라, Character
라는 객체로 승화시켜,
이에 대한 편의 메서드를 사용할 수 있게 해 준다. 물론 char
로서의 역할도 한다.
이 Character
라는 클래스가 제공하는 편의 메서드 중, '0', '1', '2' 와 같은 문자인 숫자를,
실제 정수 데이터로 반환해 주는 메서드이다.
getNumericValue()
의 정확한 의미는, Numeric 이라는 뜻에 있는데,
이는 수학적 이라는 의미이다. 즉, 문자에서 수학적 의미를 찾아 정수로 되돌려 준다는 의미이다.
Answer 2 - 직접 메서드를 제작
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 제공되는 길이는 그 다음 데이터에서 알 수 있음.
br.readLine();
String str = br.readLine().trim();
int sum = 0;
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
int realData = charToInt(ch);
sum += realData;
}
System.out.println(sum);
}
public static int charToInt(char ch){
switch (ch) {
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
default:
return 0;
}
}
}
위의 코드는 Character.getNumericValue()
메서드 대신 작성한 코드이다.
만약, 실제 숫자 문자가 아닐 경우, 0
을 반환하게 하여 에러를 일으키지 않도록 변형하였다.
문자 수 를 실제 숫자 데이터로 변환한다 라는 관심사항을 분리하여 만들었다.
실제로 Character
클래스의 getNumericValue()
메서드가 기억나지 않는다면,
이를 if-else
문법으로도 만들 수 있다.
'백준-단계별로 풀어보기 > 5-문자열' 카테고리의 다른 글
백준 5622 Java - 다이얼 (0) | 2024.09.11 |
---|---|
백준 10809 Java - 알파벳 찾기 (1) | 2024.09.10 |
백준 11654 Java - 아스키 코드 (1) | 2024.09.09 |
백준 27866 Java - 문자와 문자열 (1) | 2024.09.08 |