Coding - Algo/Java

[SWEA] 1244:최대 상금(Java 자바)

jainn 2022. 3. 2. 14:35
728x90

꼭 교환횟수를 채워야한다.

94 1 이 입력되었을 때, 94가 최대 상금이지만 1회 교환해준 49가 최대 상금이다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Solution {
	static int res;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();

		int T = Integer.parseInt(br.readLine());
		for (int t = 1; t <= T; t++) {
			st = new StringTokenizer(br.readLine());
			char[] num = st.nextToken().toCharArray();
			int times = Integer.parseInt(st.nextToken());
			
			res = 0;
			change(times, 0, num);
			
			sb.append("#").append(t).append(" ").append(res).append("\n");
		}
		System.out.println(sb);
	}

	public static void change(int cnt, int start, char[] num) {
		if (cnt == 0) {
			// 교환횟수 끝나면
			int tmp = Integer.parseInt(new String(num));
			res = tmp > res ? tmp : res;
			return;
		}
		int n = num.length;
		for (int i = start; i < n - 1; i++) {
			for (int j = i + 1; j < n; j++) {
				char temp = num[i];
				num[i] = num[j];
				num[j] = temp;
				change(cnt-1, i, num);
				num[j] = num[i];
				num[i] = temp;
			}
		}
	}
}
반응형