[자바JAVA]백준 11720 숫자의 합 풀이

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
입력으로 주어진 숫자 N개의 합을 출력한다.

1
2
3
4
5
6
//입력
1
1

//출력
1
  • 입출력예시2
1
2
3
4
5
6
//입력
5
54321

//출력
15
  • 입출력예시3
1
2
3
4
5
6
//입력
25
7000000000000000000000000

//출력
7
  • 입출력예시4
1
2
3
4
5
6
//입력
11
10987654321

//출력
46




풀이1: 배열사용

  • memory 11652 runtime 84

String array로 입력을 받은 뒤 int array에 담아서 누적합 해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class _11720 {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
String[] nums = br.readLine().split("");
int sum = 0;

//Convert String array to int array
int[] intNums = new int[cnt];
for(int i=0; i<cnt; i++){
intNums[i] = Integer.parseInt(nums[i]);
}

//Sum
for(int n : intNums){
sum += n;
}
System.out.println(sum);
}
}




풀이2: 배열사용하지않고 풀기 -> getBytes()사용

  • memory 11480 runtime 80

getBytes()는 String을 Byte로 변환해준다.

위 표를 보면 숫자 0은 Decimal 48임을 알 수 있다. byte를 int로 변환하기 위해서는 48 또는 ‘0’을 빼주면 된다.

1
2
3
4
// n이 byte형이기때문에 아래 두 식은 같은 의미 (n-48) == (n-'0')
// int형으로 합을 하기 위해서 아스키코드에서 숫자 1은 49부터 시작하기때문에 숫자 0인 48을 빼줘야 함.
sum += (n - 48);
sum += (n - '0');

전체 코드는 아래와 같다.
배열을 사용한 것과 큰 차이는 안나지만 배열없이도 문제를 풀 수 있음을 배웠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class _11720 {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine(); // cnt는 사용하지 않으므로 입력만 받음
int sum = 0;
for(byte n : br.readLine().getBytes()){
sum += (n - 48);
//sum += (n - '0'); // n-48과 n-'0'은 같은 의미인데 그 이유는 아스키코드에서 숫자 1은 49부터 시작하기때문에 숫자 0인 48을 빼줘야 함.
}
System.out.println(sum);
}
}




백준의 다른 문제 풀이가 보고싶다면?

Comments