작심 365
[백준 2659번] 십자카드 문제 - (java) 본문
문제 : https://www.acmicpc.net/problem/2659
📌 문제 탐색하기
먼저 주어진 카드에서 시계수를 어떻게 구하는지를 생각해보고, 그 카드로 만든 시계수가 1111 ~ 9999 까지의 숫자들 중에 시계수 중에서 몇번째로 작은 시계수인지를 구하면 된다.
시계수를 구하는 방법은 입력받은 숫자를 오른쪽 방향으로 돌면서 모든 가능한 만들 수 있는 수를 확인하면 된다. 항상 4자리 이므로 4번만 반복하면 된다. 시간 소요 x
다음은 해당 우리가 만든 시계수가 나올 수 있는 모든 수 중에서 몇번째로 작은지를 구하면 되는데 숫자의 범위가 1111 ~ 9999 로 그렇게 많지 않기때문에 수를 하나씩 확인해봐도 된다. 단 여기서 숫자 0은 없기때문에 0이 들어갔을 때만 카운트에서 제외시키면 된다.
📌 코드 설계하기
1. 입력받은 카드 정보로 시계수를 구한다.
2. 위에서 구한 시계수보다 작은 범위 안에서 존재하는 시계수를 전부 구한다.
이때 시계수 인지를 판단하기 위한 함수를 하나 만들고, 0을 포함하는지도 확인해준다.
📌 코드
import java.util.Scanner;
// 십자카드 문제
public class Main {
private static boolean checkClockNum(String str){ // 해당 숫자가 시계수인지 판별하는 함수
StringBuilder tmp = new StringBuilder();
int min_num = 9999;
for(int i=0; i<4; i++){
tmp.append(str.charAt(i));
tmp.append(str.charAt((i+1)%4));
tmp.append(str.charAt((i+2)%4));
tmp.append(str.charAt((i+3)%4));
if(Integer.parseInt(String.valueOf(tmp))<min_num){
min_num = Integer.parseInt(String.valueOf(tmp));
}
tmp = new StringBuilder();
}
if(min_num == Integer.parseInt(str)){
return true;
}
return false;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] nums = new int[4];
for (int i = 0; i < 4; i++) {
nums[i] = sc.nextInt();
}
int min_num = 9999;
int num = 0;
int count = 0;
StringBuilder tmp = new StringBuilder();
for (int i = 0; i < 4; i++) {
tmp.append(nums[i]);
tmp.append(nums[(i + 1) % 4]);
tmp.append(nums[(i + 2) % 4]);
tmp.append(nums[(i + 3) % 4]);
num = Integer.parseInt(tmp.toString());
if (min_num > num) {
min_num = num;
}
tmp = new StringBuilder();
}
for(int i=1111; i<min_num; i++){
if(String.valueOf(i).contains("0") || !checkClockNum(String.valueOf(i)))
continue;
count+=1;
}
System.out.println(count+1);
}
}
'코테 > 백준' 카테고리의 다른 글
[백준19941번] 햄버거 분배 - (python) (1) | 2024.12.27 |
---|---|
[백준 13901번] 로봇 - (python) (0) | 2024.12.21 |
[백준 2012번] 등수 매기기 - (java) (1) | 2024.12.18 |
[백준 18230번] 2xN 예쁜 타일링 - (java) (1) | 2024.12.08 |
[백준 14247번] 나무 자르기 - (java,python) (2) | 2024.12.07 |
Comments