반응형

 

[광고 누르면 오늘의 행운 상승!!]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo&categoryId=AWXRUN9KfZ8DFAUo&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

자바 API를 얼마나 잘 알고있냐 를 테스트하는 문제

풀이 1.

1. N/4만큼의 영역을 16진수로 변환한다.

2. 변환한 값이 리스트에 없다면(중복제거) 리스트에 추가한다.

3. 다음 영역으로 이동한다 

4. 리스트를 정렬시킨다.

5. K번째 수를 구한다.

package Study5;

import java.io.*;
import java.util.*;

public class 보물상자비밀번호 {
	static int T,K,N;
	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("test.txt"));
		Scanner sc = new Scanner(System.in);
		T = sc.nextInt();
		
		for (int tc = 1; tc <= T; tc++) {
			int N = sc.nextInt(); // 4의 배수, 8<=N<=28
			int K = sc.nextInt(); // K번째 큰 수 
			String s = sc.next();
			List<Integer> list = new ArrayList<>();
			for (int i = 0; i < N/4; i++) {
				int start = 0;
				int end   = N/4;
				for (int j = 0; j < 4; j++) {
					String hex = s.substring(start, end);
					int num = Integer.parseInt(hex,16);
					if(!list.contains(num))list.add(num);
					start = end;
					end += N/4;
				}
				char c = s.charAt(N-1);
				s = c+s.substring(0,N-1);
			}
			Collections.sort(list);
			System.out.println("#" + tc + " " + list.get(list.size()-K));
		}
		sc.close();
	}
}

 풀이 2.

값은 N/4만큼 순환되기에 입력값에 N/4-1을 더해서 코드 길이를 줄인다.

1. 입력값에 N/4-1를 더한다.

2. 16진수로 변환하여 저장한다.

3. 리스트에 값이 없다면(중복제거) 리스트에 추가한다.

4. 거꾸로 정렬시킨다.

5. K번째를 출력한다.

package Study5;

import java.io.*;
import java.util.*;

public class 보물상자비밀번호2 {
	static int T,K,N;
	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("test.txt"));
		Scanner sc = new Scanner(System.in);
		T = sc.nextInt();
		
		for (int tc = 1; tc <= T; tc++) {
			int N = sc.nextInt(); // 4의 배수, 8<=N<=28
			int K = sc.nextInt(); // K번째 큰 수 
			String s = sc.next();
			String t = s+s.substring(0, N/4-1);
			List<Integer> list = new ArrayList<>();
			for (int i = 0; i < N; i++) {
				String hex = t.substring(i, i+N/4);
				int num = Integer.parseInt(hex,16);
				if(!list.contains(num))list.add(num);
			}
			Collections.sort(list ,Collections.reverseOrder());
			System.out.println("#" + tc + " " + list.get(K-1));
		}
		sc.close();
	}
}

 

 

 

반응형

+ Recent posts