[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. 문제 설명 

백준 11720

 

 

  • 만약 예제 입력값이 숫자 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);
	}
}

BELATED ARTICLES

more