#11720 - 숫자의 합
📌 문제 정보
- 문제 이름 : #11720번 - 숫자의 합
- 문제 링크: https://www.acmicpc.net/problem/11720
📌 문제 요약
- 핵심 조건: N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성
- 시간복잡도 제한: .
📌 최종 정답 및 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String M = sc.next();
int sum = 0;
for (int i=0; i<N; i++) {
char digit = M.charAt(i);
int num = digit - '0';
sum += num;
}
System.out.print(sum);
}
}
<-- 풀이 요약 -->
- 숫자가 공백 없이 한 줄에 붙어 있다. -> 문자열로 읽고, 한 글자씩 잘라서 숫자로 바꿔 더해야 함.
- 흐름 : N 받음 -> 숫자를 문자열로 받음 -> for문으로 한 글자씩 숫자 변환 -> sum 누적 -> 출력
- int num digit - '0' 대신 Character.getNumbericValue(digit) 사용 가능.
<-- 다른 풀이 요약 -->
// 1 : 문자열 -> char 배열로 변환 (toCharArray()버전)
int sum = 0;
for (char ch : M.toCharArray()) {
sum += ch - '0';
}
System.out.println(sum);
- 한 번에 문자 배열로 바꿔서 for-each문으로 순회할 수 있음.
- charAt(i) 대신 toCharArray() + for-each : 인덱스 실수 줄어
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
-** digit & Character.getNumbericValue() **
- 문자 -> 숫자 다룰 때 알아두면 좋은 것.
- char vs String? : char은 문자 하나 ('5'), String은 문자열 ("5")
- digit 변수 : 문자 하나 저장할 때 쓰는 이름 (숫자 한 자리만 다룰 때)
- Character.getNumericValue(char ch) : 문자 ch를 정수로 바꿈 (아스키코드 몰라도 됨 -> 알파벳 같이 처리 및 의미 명확성)
// digit
String M = "54321";
char digit = M.charAt(0); // '5'
// 아스키코드 뺄셈
int num = digit - '0'; // '5'-'0' = 53 - 38 = 5
// Numeric
int num = Character.getNumericValue(digit); // 5
| charAt(i) | 문자열의 i번째 문자 꺼내기 |
| digit - '0' | 문자 → 숫자 (숫자 문자만) => 문자 하나 |
| Character.getNumericValue() | 문자 → 숫자 (숫자/알파벳 다 처리 가능) => 그 문자를 안전하게 숫자로 |
다시 꼭 풀기..!