다희의 코딩 성장일기

[SWEA] 5658. 보물상자 비밀번호 (자바 JAVA) 본문

Algorithm/SWEA

[SWEA] 5658. 보물상자 비밀번호 (자바 JAVA)

ilmiodiario 2021. 10. 4. 20:06

[ 문제 ]  [SWEA] 5658. 보물상자 비밀번호 (자바 JAVA)

 

문제 링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo 

 

SW Expert Academy

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

swexpertacademy.com


# 접근 방법 및 풀이 

 

  • 삼성 모의 역테중에 다소 쉬운 구현문제다. TreeSet을 이용해서 풀었다.
  • 문제의 예시 그림엔 마름모 형태로 쉽게 이해하도록 되어있는데, 1차원 배열을 N길이 만큼 만들어 입력된 값을 넣고, 시계방향으로 한칸씩 회전한다고 했으므로 오른쪽으로 한칸씩 이동시켜주면 된다.
  • 이때 N은 4의 배수로 주어진다. 주어진 N을 4로 나누면 한 변에 문자열 갯수를 알 수 있고, 해당 문자열 갯수만큼 회전을 돌리면 처음 주어진 상태로 돌아온다.
  • 문제 예시처럼 N = 12일 경우, N/4 = 3으로 한 변에 3문자씩 있고 3번회전 돌리면 처음 상태와 같다.
  • 따라서 0~N/4번 회전을 돌리면, 적혀진 수로 만들 수 있는 모든 숫자들을 구할 수 있다.
  • 이때 문제에서 같은 숫자가 나올 경우 중복을 제거해야하므로 Set을 이용했고, K번째 큰 수 이므로 정렬이 필요하기때문에 TreeSet을 이용했다.
  • 자세한건 코드참조

# 주의할 점 

 

  • 같은 숫자일 경우 중복 제거하기

 

JAVA 코드
package 모의SW역량테스트;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.StringTokenizer;
import java.util.TreeSet;

public class swea_5658_보물상자비밀번호 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(in.readLine());
		for(int tc = 1; tc <= T; tc++) {
			StringTokenizer st = new StringTokenizer(in.readLine());
			int N = Integer.parseInt(st.nextToken());
			int K = Integer.parseInt(st.nextToken());
			String arr[] = in.readLine().split("");
			TreeSet<String> set = new TreeSet<>(Collections.reverseOrder());
			for(int i = 0; i < N/4; i++) {
				String tmp = arr[N-1];
				for (int j = N-1; j > 0; j--) {
					arr[j] = arr[j-1];
				}
				arr[0] = tmp;
				for (int j = 0; j < arr.length; j+= N/4) {
					StringBuilder sb = new StringBuilder();
					for (int k = j; k < j+(N/4); k++) {
						sb.append(arr[k]);
					}
					set.add(sb.toString());
				}
			}
			String answer[] = set.toArray(new String[set.size()]);
			System.out.println("#" + tc + " " + Long.parseLong(answer[K-1], 16));
		}
		
	}
}

 

 

 

REVIEW

와 이거 예전에 도전했던게 있길래 풀었는데,, 7회차까지 도전했다가도 못푼거면 예전에 정말 못했었구나...?

지금은 뚝딱풀었는데..흠.. 더 열심히 성장해야지

'Algorithm > SWEA' 카테고리의 다른 글

[SWEA] 1953. 탈주범 검거(자바 JAVA)  (0) 2021.09.10
[SWEA] 4012. 요리사 (자바 JAVA)  (0) 2021.09.09
[SWEA] 5650. 핀볼게임 (자바 JAVA)  (0) 2021.09.09
Comments