ZeroRadish

[백준] 2659번 십자카드 문제(JAVA) 본문

카테고리 없음

[백준] 2659번 십자카드 문제(JAVA)

ZeroRadish Etc 2024. 6. 14. 23:35

https://www.acmicpc.net/problem/2659


문제 해결 방법

1. 입력 받기

  • 네 자리 숫자 4개를 입력 받습니다.

2. 가능한 최소의 수 찾기

  • 네 자리 숫자 4개의 순열을 회전시켜 가장 작은 수를 찾습니다. 예를 들어, 입력이 1 2 3 4 라면, 1234, 2341, 3412, 4123 중에서 가장 작은 수는 1234입니다.

3. 1111부터 9999까지의 모든 네 자리 숫자에 대해 가능한 최소의 수를 계산

  • 각 숫자에 대해 최소의 수를 계산하고, 해당 최소 수를 true로 표시하는 boolean 배열을 사용합니다.

4. 주어진 수까지의 가능한 최소 수의 순서 계산

  • 주어진 수보다 작은 모든 가능한 최소 수를 카운트하여 순서를 출력합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int[] Ns = new int[4];
        for (int i = 0; i < Ns.length; i++) {
            Ns[i] = Integer.parseInt(st.nextToken());
        }

        int N = findMin(Ns);
        boolean[] clockN = new boolean[10000];

        for (int i = 1111; i <= 9999; i++) {
            if (String.valueOf(i).contains("0")) {
                continue;
            }
            int[] digits = new int[4];
            int num = i;
            for (int j = 3; j >= 0; j--) {
                digits[j] = num % 10;
                num /= 10;
            }
            int minClockN = findMin(digits);
            clockN[minClockN] = true;
        }

        int cnt = 1;
        for (int i = 1111; i < N; i++) {
            if (clockN[i]) {
                cnt++;
            }
        }
        System.out.println(cnt);
    }

    private static int findMin(int[] nums) {
        int minNum = 9999;
        for (int i = 0; i < 4; i++) {
            int rotatedNum = 0;
            for (int j = 0; j < 4; j++) {
                rotatedNum = rotatedNum * 10 + nums[(i + j) % 4];
            }
            if (rotatedNum < minNum) {
                minNum = rotatedNum;
            }
        }
        return minNum;
    }
}
Comments