最大プログラマレベル2(ソート)

1932 ワード

static int max_num=-1000;

	public static void Max(int num)
	{
		if(max_num<num)
			max_num=num;
	}
	static int change_number(int[] arr, int r) {
		StringBuilder result = new StringBuilder();
		result.append(0);
		for(int i = 0; i < r; i++)
			result.append(arr[i]);
		return Integer.parseInt(result.toString());
	}
	static void per(int[] arr, int[] output, boolean[] visited, int depth, int n, int r) {
		if(depth == r) {
			Max(change_number(output, depth));
			return;
		}

		for(int i = 0; i < n; i++) {
			if(visited[i] != true) {
				visited[i] = true;
				output[depth] = arr[i];
				per(arr, output, visited, depth + 1, n, r);
				visited[i] = false;
			}
		}
	}

	public static void main(String[] args) throws NumberFormatException, IOException {
		int[] numbers = {40, 404};
		int n = numbers.length;
		int[] output = new int[n];
		boolean[] visited = new boolean[n];

		per(numbers, output, visited, 0, n, n);

		System.out.println(Integer.toString(max_num));
	}
------>ランタイムエラー
// 숫자를 문자열로 변환
		String[] result = new String[numbers.length];
		for (int i = 0; i < numbers.length; i++) {
			result[i] = String.valueOf(numbers[i]);
		}

		// 정렬
		Arrays.sort(result, new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				System.out.println(o1+"::"+o2);
				for(int i=0;i<result.length;i++)
				{
					System.out.print(result[i]+" ");
				}
				System.out.println();
				return ((o2 + o1).compareTo(o1 + o2));
			}
		});

		// 0만 여러개 있는 배열의 경우 하나의 0만 리턴
		if (result[0].equals("0")) {
			//return "0";
		}

		String answer = "";
		// 정렬된 문자 하나로 합치기
		for (String a : result) {
			answer += a;
		}