내 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String str = sc.nextLine(); // 개행 문자(엔터) 처리
str = sc.nextLine(); // 실제 두 번째 입력 값을 받음
sc.close();
char[] tmp = str.toCharArray();
int sum = 0;
for(int i = 0; i < n; i++) {
sum += (tmp[i] - '0');
}
System.out.println(sum);
}
}
첫 번째 입력인 숫자의 개수를 n으로 받는다. 그리고 두 번째 입력으로 각 자릿 수에 합을 구해야하는 숫자 값을 String으로 받은 후 char 배열에 문자로 받는다.
그렇게 받은 char 배열의 각 원소의 값들은 아스키코드 값을 가지고 있기 때문에 -48 또는 -'0' 을 해주어 숫자 값으로 디코딩하고 해당 숫자를 숫자의 개수만큼 for문을 반복하여 그 값을 sum에 더한 후 결과를 출력한다.
생각해야할 점
- Scanner로 받는 경우, nextInt() 메서드는 사용자 입력에 가장 마지막 개행 문자를 제거하지 않기 때문에 두 번째에 오는 값을 nextLine() 메서드로 받으면 이를 개행 문자(엔터)만 입력 받아 처리하고 종료된다는 점을 주의해야 한다.
- 위 문제에 대해서는 allg.tistory.com/17 이 블로그를 참조해서 해결했다.
개선된 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String str = sc.next();
sc.close();
int sum = 0;
for(int i = 0; i < n; i++) {
sum += str.charAt(i) - '0';
}
System.out.println(sum);
}
}
String 입력을 nextLine()이 아닌 next로 받아서 charAt()으로 처리하는 방식을 사용하면 위와 같이 nextLine()을 두 번 사용하거나 char 배열을 사용하지 않고 조금 더 간결하게 해결할 수 있다. 아직 BufferedReader 를 사용하지 않고 Scanner로만 구현하기 때문에 코드를 개선시키는 것에는 아직 배워야할 내용이 더 필요할 것 같다.
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 1065/함수]한수 - JavaScript (0) | 2021.10.10 |
---|---|
[백준 4344번/1차원 배열] 평균은 넘겠지 - Java (0) | 2021.03.15 |
[백준 8958번/1차원 배열] OX퀴즈 - Java (0) | 2021.03.15 |
[백준 1546번/1차원 배열] 평균 - Java (0) | 2021.03.15 |
[백준 3052번/1차원 배열] 나머지 - Java (0) | 2021.03.15 |