곽로그

[백준 11720] 숫자의 합 본문

알고리즘/백준

[백준 11720] 숫자의 합

일도이동 2019. 4. 15. 21:05
반응형
 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 문제의 조건을 생각하지 않고 바로 문제를 풀었을 때의 접근법은 아래와 같다.

 

0) 연속된 숫자의 개수(N)과 연속된 숫자(numS)를 입력받는다.

1) numS를 입력받는다

2) numS를 10으로 나눈 나머지를 sum에 더한다

3) numS를 10으로 나눈다

4) N만큼 반복한다

 

 위의 접근법에 따른 풀이는 아래 코드와 같다. 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		//n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.
		Scanner in=new Scanner(System.in);
		int N=in.nextInt(); 
		long numSequence=in.nextLong();
		long sum=0;
		
		
		for(int i=0;i<N;i++) {
			sum+=numSequence%10;
			numSequence=numSequence/10;
		}
		System.out.println(sum);
	}
}

 위의 코드는 예제케이스에서는 돌아가지만 백준채점서버에서는 런타임에러가 나는데, 그 이유는 조건을 생각하지 않았기 때문이다. 

 

 문제에서 N의 범위가 100이하라고 명시되어 있다. 만약 N이 100이게 되면 numSequence에 100자리수가 들어가게 되는데, long으로 표현할 수 있는 범위는 64비트까지 이므로 100자리수를 담을 수 없기 때문에 런타임에러가 나는 것이다. 

 

 접근법을 바꿔야 한다. String 으로 numSequence를 입력받아서 String 클래스의 charAt메서드를 이용해 String배열에 있는 각 숫자를 더해주면 된다. 이때, charAt메서드로 반환되는 값은 int가 아니라 char이므로 문자를 숫자로 변환해줘야 한다. 아스키코드를 이용하면 된다. 

 

위의 예시에서 보면 c에 문자 1을 담았고 이것을 다시 int i에 담았다. 이를 출력해보면 c는 문자 1이 출력되고 i는 49가 출력이 된다. 아스키 코드를 보자

 

https://ko.wikipedia.org/wiki/ASCII

아스키코드를 보면 문자 1은 컴퓨터 상에서 이진수 011 0001로 저장된다. 이를 int로 변환하면 011 0001을 십진수로 변환한 49가 출력이 되는거다. 

 

 다시 문제로 돌아가서

 예를 들어 N이 5이고 numS에 12345를 입력받았다고 해보자. sum+=numS.charAt(i);를 이용해서 1,2,3,4,5의 합을 구하려고 하면 49+50+51+52+53이 출력된다. 따라서 numS.charAt(i)에 numS.chatAt(i)-48을 해주면 (49-48)+(49-48)+(50-48)+(51-48)+(52-48)+(53-48)이 출력된다. 

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		//n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.
		Scanner in=new Scanner(System.in);
		int N=in.nextInt(); 
		String numSequence=in.next();
		int sum=0;
		for(int i=0;i<N;i++) {
			sum+=numSequence.charAt(i)-48;
		}
		System.out.println(sum);
	}
}
 	
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 10817] 세 수  (0) 2019.04.16
[백준 11721] 열 개씩 끊어 출력하기  (0) 2019.04.16
[백준 8393] 합  (0) 2019.04.15
[백준 1924] 2007년  (0) 2019.04.09
[백준 2441] 별찍기 -4  (0) 2019.04.09
Comments