[Java] 실전 문제 - 숫자의 합 구하기(백준 11720)
2023. 9. 23. 00:00
🧑🏻💻 하루코딩 님의 Do it! 알고리즘 코딩테스트 강의(인프런)를 듣고 정리한 내용입니다.
https://www.acmicpc.net/problem/11720
11720번: 숫자의 합
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
www.acmicpc.net
1. 문제 설명


- 만약 예제 입력값이 숫자 5개, 공백 없이 주어진 숫자가 5개 54321 라면 5 + 4 + 3+ 2 + 1을 더해서 15를 출력해야 한다.
- 숫자 54321에서 각각의 숫자를 뽑아내기 위해서는
54321 / 10000 = 5, 54321 % 10000 = 4321, 4321 / 1000 = 4, 4321 % 1000 = 321 ... 이런 연산을 반복하여 뽑아내야 한다. - 하지만 여기서 간과하면 안 되는 것이 숫자의 개수이다. 실제로 문제에서 1<= N <= 100 을 조건으로 주었는데 만약 숫자의 개수가 100개가 되어버리면 더이상 그 숫자는 int 또는 long이 될 수 없다. 즉 위와 같은 연산을 반복해서 뽑아낼 수 없다는 것이다.
✔️ 이런 식으로 문제를 꼼꼼하게 읽어야 한다. 로직이 생각나자마자 진행하면 안 된다.
초기 방향이 잘못 설정되었을 때 다시 되돌리기가 쉽지 않기 때문에 문제를 꼼꼼하게 잘 분석하고 진행하는 것을 추천.
강의를 듣기 전에 미리 풀어봤는데 문제 파악부터 완전 틀렸다...... 예제를 보고 아무 생각없이 Scanner를 써서 진짜 다 받아서 더한 값이 나오도록 짰다(어쩐지 쉽더라). 하지만 당연히 백준에서는 컴파일 에러가 나왔고...... 😇 다시 한 번 문제를 더 꼼꼼하게 읽어야겠다는 생각을 했다.
2. 문제 분석하기
✏️ 1. 문제 분석하기
- N의 범위가 1부터 100까지이므로 int 나 long 형과 같은 숫자형으로 담을 수 없다.
→ 그렇다면 String 문자열로 대체할 수 있다. String = "54321" - 문자열로 담아준다면 이 문자열은 문자 하나씩으로 쪼갤 수 있다.
→ toCharArray 함수를 사용하면 문자 배열로 만들 수 있다. - 그럼 각각 Chracter 형으로 만들어진 것을 더하기 위해서는 int 형으로 바꿔야 한다.
→ 이때 아스키 코드를 사용할 수 있다.
→ 아스키 코드에서 같은 의미의 문자와 숫자의 코드 값 차이는 48이다.
('1' - 48 = 1, 문자 1에서 48을 빼면 숫자 1이 나온다.)
✏️ 2. 손으로 풀어보기
- 숫자의 개수만큼 입력받은 값을 String으로 저장한다.
- String으로 입력받은 값을 char[] 형으로 변환한다. → toCharArray
- 인덱스 0부터 끝까지 배열을 탐색하며 각 값을 정수형으로 변환하고 결괏값에 더하여 누적한다.
✏️ 3. 슈도 코드 작성하기
N 값 입력받기
길이 N의 숫자를 입력받아 String 변수 sNum에 저장하기
sNum을 다시 char[] 변수 cNum에 변환하여 저장하기
int 변수 sum 선언하기
for(cNum 길이만큼 반복하기){
배열의 각 자릿값을 정수형으로 변환하며 sum에 더하여 누적하기
}
✏️ 4. 실제 코드 작성하기
public class SumOfNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt(); // 숫자 개수
String sNum = scanner.next(); // 입력받은 숫자(String)
char[] cNum = sNum.toCharArray(); // 문자 배열로 변경
int sum = 0;
for(int i = 0; i < cNum.length; i++) {
int num = cNum[i] - '0';
sum += num;
}
System.out.println(sum);
}
}
'코딩테스트 > 알고리즘' 카테고리의 다른 글
[Java] 03-2. 자료구조 : 구간 합 구하기 1 (0) | 2023.09.23 |
---|---|
[Java] 실전 문제 - 평균구하기(백준 1546) (0) | 2023.09.23 |
[Java] 03-1. 자료구조 : 배열과 리스트 (0) | 2023.09.21 |
[Java] 02. 디버깅 (0) | 2023.09.21 |
[Java] 01. 시간 복잡도 (0) | 2023.09.21 |