[SWEA]Summation

문제 보러가기

제한사항

테스트 케이스의 첫 번째 줄에는 자연수 10개가 공백으로 구분되어 주어진다.

모든 자연수는 1이상 1,000,000이하이다. => int

첫번째 생각

각 자리의 수를 더하기 위해 String으로 변환 한 후, 각 각의 숫자를 더한다.

두번째 생각

숫자의 길이를 구한다.

​ int len = i.length();

​ for(int i=0; i<len; i++) { ​ // 나누기 연산으로 낮은 자리수부터 쳐낸다. ​ }

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.util.Scanner;

public class Solution {
	static Scanner sc;
	static int[] ar;
	static int max;
	static int min;
	public static void main(String[] args) {
		sc = new Scanner(System.in);
		int T = sc.nextInt();
		for(int tc=1;tc<=T;tc++) {
			ar = new int[10];
			init();
			run_1();
			System.out.println("#"+tc+" "+max+" "+min);			
//			run_2();
//			System.out.println("#"+tc+" "+max+" "+min);
		}
	}

	public static void init() {
		max = Integer.MIN_VALUE;
		min = Integer.MAX_VALUE; 
        // Integer.MAX_VALUE가 어떻게 최대값을 가져오는지 찾아볼 것. 
		for(int i=0; i<ar.length; i++) {
			ar[i] = sc.nextInt();
		}
	}
	
	public static void run_1() {
		// 시간 측정: 0.0
		for(int i=0; i<ar.length; i++) {
			String target = ar[i] + "";
			int num = 0;
			for(int j=0; j<target.length(); j++) {
				num += target.charAt(j)-'0';
			}
			max = max < num ? num : max;
			min = min > num ? num : min;
		}
	}
	
	public static void run_2() {
		// 시간 측정2: 0.016
		for(int i=0; i<ar.length; i++) {
			int target = ar[i];
			int len = (target+"").length();
			int num = 0;
			for(int j=0; j<len; j++) {
				int tmp = target/10 * 10;
				num += (target - tmp);
				target = target/10;
			}
			max = max < num ? num : max;
			min = min > num ? num : min;
		}
	}
}