[백준 Java] 2659번 십자카드 문제 (중복순열, 구현, 브루트포스)

2023. 6. 19. 02:12·Algorithm/PS - 백준
728x90
반응형

 

[Silver III] 십자카드 문제 - 2659

문제 링크

성능 요약

메모리: 15096 KB, 시간: 100 ms

분류

브루트포스 알고리즘, 구현, 정렬

문제 설명

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

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

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

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

입력

입력은 한 줄로 이루어지며, 이 한 줄은 카드의 네 모서리에 씌여있는 1 이상 9 이하의 숫자 4개가 시계 방향으로 입력된다. 각 숫자 사이에는 빈칸이 하나 있다.

출력

입력된 카드의 시계수가 모든 시계수들 중에서 몇 번째로 작은 시계수인지를 출력한다.

 

 

💡 나의 접근

이 문제의 분류에 왜 정렬이 있는지 잘 모르겠다.

정렬하지 않은 상태 즉, 문제에서 주어진 입력 상태 그대로 시계수를 찾아야 한다.

이유는 3 1 3 1의 시계수는 1313이다. 만약 입력을 정렬한다면 1 1 3 3 이 되고 이것의 시계수는 1133이 되기 때문에 잘못된 시계수를 찾게된다.

 

나의 풀이는 

먼저 주어진 입력의 시계수를 찾은 후 

1111 ~ 9999 까지의 모든 경우에서 시계수를 찾고

주어진 시계수보다 작다면 중복을 허용하지 않기 위해 HashSet에 넣어주었다. 

그리고 나서 set의 크기를 출력하였다.

 

 

💡 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main {
	static int num[] = new int [4];
	static int clockNum;
	static int minNum;
	static HashSet<Integer> set = new HashSet<>();
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		for (int i = 0; i < 4; i++) {
			num[i] = Integer.parseInt(st.nextToken());
		}
		//------입력
		
		clockNum = 	getClockNum(num);
		
		num = new int[]{ 1, 1, 1, 1};
		
		findSmallColockNum(0); 
		
		System.out.println(set.size());
	}
	
	//주어진 시계수보다 작은 시계수 찾는 함수
	static void findSmallColockNum(int cnt) {
		if(cnt >= 4) {
			int minNum = getClockNum(num);
			if(minNum <= clockNum) {
				set.add(minNum);
			}
			return;
		}
		
		for (int i = 1; i <= 9; i++) {
			num[cnt] = i;
			findSmallColockNum(cnt+1);
		}
		
		
	}

	//-----시계수 구하기
	static int getClockNum(int[] num) {
		int cNum = Integer.MAX_VALUE; // 시계수 초기화
		for (int i = 0; i < 4; i++) {
			int tempNum = 0;
			
			int idx = i;
			
			for (int j = 3; j >= 0; j--) {
				if(idx > 3) {
					idx= 0;
				}
				tempNum += num[idx++] * Math.pow(10, j);
			}
			if(cNum > tempNum) {
				cNum = tempNum;
			}
		}
		return cNum;
	}

}
반응형

'Algorithm > PS - 백준' 카테고리의 다른 글

[백준 Java] 1406번 에디터 (스택)  (0) 2023.06.19
[백준 Java] 20301번 반전 요세푸스 (구현)  (1) 2023.06.19
[백준 Java] 1158번 요세푸스 문제 ( 구현 )  (0) 2023.06.19
[백준 Java] 1063번 킹 (구현, 시뮬레이션)  (1) 2023.06.18
[백준 Java] 1499번: 수리공 항승 : 그리디  (0) 2023.06.16
'Algorithm/PS - 백준' 카테고리의 다른 글
  • [백준 Java] 20301번 반전 요세푸스 (구현)
  • [백준 Java] 1158번 요세푸스 문제 ( 구현 )
  • [백준 Java] 1063번 킹 (구현, 시뮬레이션)
  • [백준 Java] 1499번: 수리공 항승 : 그리디
제가안난데여♪(´ε`*)
제가안난데여♪(´ε`*)
기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 제가안난데여♪(´ε`*)
    안나의 전두엽 어딘가 🧠
    제가안난데여♪(´ε`*)
    기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • 간단하게 한스푼🥄 (1)
      • Programming (56)
        • Spring (16)
        • Vue.js (6)
        • Deep Learning (3)
        • DataBase (5)
        • React (26)
      • DevOps (21)
        • Docker (12)
        • Linux (4)
      • Algorithm (46)
        • 알고리즘 정리 (5)
        • 자료구조 (0)
        • PS - 백준 (28)
        • 99클럽 코테 스터디 (13)
      • Project (0)
        • CampFire (0)
      • 안나의 취뽀일기 (˵ •̀ ᴗ - ˵ ) ✧ (4)
        • SSAFY_9기 (2)
        • SW 부트캠프 (2)
  • 잔디 달력

    «   2025/05   »
    일 월 화 수 목 금 토
    1 2 3
    4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    18 19 20 21 22 23 24
    25 26 27 28 29 30 31
  • 인기 글

  • 태그

    Vue
    자바
    topology sort
    stack
    java stack
    springboot
    React
    항해99
    알고리즘
    코딩테스트 준비
    백준
    Vue.js
    백준 구현문제
    Vue.js 입문하기
    greedy
    김영한
    자바 스택
    개발자 취업
    도커컨테이너
    docker
    til
    java 백준
    도커
    99클럽
    리액트 상태
    front-end
    linux
    java
    백준 java
    Spring
  • 05-12 11:38
    반응형
  • hELLO· Designed By정상우.v4.10.3
제가안난데여♪(´ε`*)
[백준 Java] 2659번 십자카드 문제 (중복순열, 구현, 브루트포스)
상단으로

티스토리툴바