[java] SWEA - 최대 상금

세상을 바꾸는 개발자·2023년 5월 12일
0

[문제링크 - SWEA - 최대 상금] https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15Khn6AN0CFAYD

package test1244;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
	static long max;
	static int chance;
	static String[] arr;
	public static void main(String[] args) throws IOException{
		//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedReader br = new BufferedReader(new FileReader("input.txt"));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		int c = Integer.parseInt(br.readLine());
		
		for(int t=0; t<c; t++) {
			st = new StringTokenizer(br.readLine());
			String str = st.nextToken();
			arr = str.split("");
			chance = Integer.parseInt(st.nextToken());
			
			if(arr.length < chance) {	// swap 횟수가 자릿수보다 클 때
            	chance = arr.length;	// 자릿수만큼만 옮겨도 전부 옮길 수 있음
            }
			
			max = 0;
			dfs(0, 0);
			
			sb.append("#" + (t+1) + " " + max + "\n");
		}
		System.out.println(sb);
	}
	
	public static void dfs(int L, int start) {
		if(L == chance) {
			String answer = "";
			for(int i=0; i<arr.length; i++) {
				answer += arr[i];
			}
			max = Math.max(max, Long.parseLong(answer));
			return;
		}
		
		for(int i=start; i<arr.length; i++) {
			for(int j=i+1; j<arr.length; j++) {
				String temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
				dfs(L+1, start);
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
}
profile
초심 잃지 않기

0개의 댓글

관련 채용 정보