반응형
문제 풀이
십자모양의 카드의 네 모서리 숫자의 시계수가 모든 시계수 중에서 몇 번째로 작은 시계수인지 출력하는 문제이다.
시계수란 카드의 모서리 숫자를 시계 방향으로 읽어 만들어지는 네 자리 수들 중에서 가장 작은 수이다.
getMin() 함수가 시계수를 구하는 함수이다. 각 모서리에서 읽어 만드는 수 중에서 가장 작은 수를 리턴한다.
다음으로 모든 시계수 숫자를 찾는다. 0이 나타날 수 없으므로 1111 ~ 9999를 한번에 탐색하는 것이 아닌 각 자리수를 1 ~ 9까지 순회하며 시계수를 찾는다.
찾은 모든 시계수 중에 입력으로 주어진 숫자의 시계수 보다 작은 수를 카운트하여 출력한다.
소스 코드
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 a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
int min = getMin(a, b, c, d);
boolean[] clock_num = getClockNum();
int answer = 0;
for (int i = 1111; i <= min; i++) {
if (clock_num[i]) {
answer++;
}
}
System.out.println(answer);
}
public static boolean[] getClockNum() {
boolean[] visit = new boolean[10000];
for (int a = 1; a < 10; a++) {
for (int b = 1; b < 10; b++) {
for (int c = 1; c < 10; c++) {
for (int d = 1; d < 10; d++) {
int n = getMin(a, b, c, d);
if (!visit[n]) {
visit[n] = true;
}
}
}
}
}
return visit;
}
public static int getMin(int a, int b, int c, int d) {
int min = Integer.MAX_VALUE;
min = Math.min(min, a * 1000 + b * 100 + c * 10 + d);
min = Math.min(min, b * 1000 + c * 100 + d * 10 + a);
min = Math.min(min, c * 1000 + d * 100 + a * 10 + b);
min = Math.min(min, d * 1000 + a * 100 + b * 10 + c);
return min;
}
}
반응형
'알고리즘(Algorithm) > 백준(Baekjoon)' 카테고리의 다른 글
[백준 Baekjoon] 1826번 연료 채우기 - JAVA (0) | 2021.12.15 |
---|---|
[백준 Baekjoon] 2641번 다각형그리기 - JAVA (0) | 2021.12.14 |
[백준 Baekjoon] 7569번 토마토- JAVA (0) | 2021.12.06 |
[백준 Baekjoon] 7576번 토마토- JAVA (0) | 2021.12.06 |
[백준 Baekjoon] 15711번 환상의 짝궁- JAVA (0) | 2021.12.05 |