[2659] 십자카드 문제

HeeSeong·2024년 10월 24일
0

백준

목록 보기
113/116
post-thumbnail

🔗 문제 링크

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


🔍 문제 설명


위와 같은 십자모양의 한 장의 카드에서, 네 모서리에 1 이상 9 이하의 숫자가 하나씩 씌여 있다. 이 네 개의 숫자 중에는 같은 숫자도 있을 수 있다.

모든 가능한 십자 카드가 주어질 때, 각각의 카드는 다음과 같은 '시계수'라는 번호를 가진다. 시계수는 카드의 숫자들을 시계 방향으로 읽어서 만들어지는 네 자리 수들 중에서 가장 작은 수이다. 위 그림의 카드는 시계방향으로 3227, 2273, 2732, 7322로 읽을 수 있으므로, 이 카드의 시계수는 가장 작은 수인 2273이다.

입력으로 주어진 카드의 시계수를 계산하여, 그 시계수가 모든 시계수들 중에서 몇 번째로 작은 시계수인지를 알아내는 프로그램을 작성하시오.

예를 들어서, 다음과 같은 십자 카드의 시계수는 1122이며, 이 시계수보다 작은 시계수들은 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119 뿐이므로 1122는 10번째로 작은 시계수다. (여기서 십자카드는 0 이 나타날 수 없으므로 1120은 시계수가 될 수 없다. 또한 1121 이 적혀있는 카드의 시계수는 1112이므로, 1121은 시계수가 될 수 없다.


⚠️ 제한사항




🗝 풀이 (언어 : Java)


단순 구현 문제이다.

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(), " ");
        br.close();
        String[] arr = new String[4];
        for (int i = 0; i < 4; i++) {
            arr[i] = st.nextToken();
        }
        solution(arr);
    }

    private static void solution(String[] arr) {
        int clockNumber = findClockNumber(arr);
        int count = 1;
        for (int i = 1111; i <= 9999; i++) {
            if (findClockNumber(String.valueOf(i).split("")) != i) {
                continue;
            }
            if (clockNumber == i) {
                System.out.println(count);
                break;
            }
            count++;
        }
    }

    private static int findClockNumber(String[] arr) {
        int min = 9999;
        for (int i = 0; i < 4; i++) {
            StringBuilder sb = new StringBuilder();
            for (int j = i; j < 4; j++) {
                sb.append(arr[j]);
            }
            for (int j = 0; j < i; j++) {
                sb.append(arr[j]);
            }
            min = Math.min(min, Integer.parseInt(sb.toString()));
        }
        return min;
    }

}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글

관련 채용 정보