본문 바로가기

ALGORITHM

백준 22251 빌런 호석 (Java)

1. 문제 링크

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

 

22251번: 빌런 호석

LED를 2개까지 바꿀 수 있을 때, 5층에서 3층, 6층, 8층, 그리고 9층으로 바꿔버릴 수 있다.

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

1. 7세그먼트에서 각 숫자가 다른 숫자가 되려면 몇 번을 반전해야 하는 지 num 배열에 저장했다.

2. dfs 방식으로 반전 최대 개수나 최대 층을 넘어서는 경우에 return 했다.

3. 자리수가 동일해진 경우 return하는데 0층인 경우를 제외하고는 결과에 +1을 한다.

4. dfs 안에서 0~9까지 가능한 숫자로 만들 수 있는 숫자를 만들어 dfs를 반복한다.

 

4. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
	static int N, K, P, X, result;
	static int[][] num;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] split = br.readLine().split(" ");
		N = Integer.parseInt(split[0]); //N층까지
		K = Integer.parseInt(split[1]); //자릿수
		P = Integer.parseInt(split[2]); //최대 반전 개수
		X = Integer.parseInt(split[3]); //현재 층수
		
		//7개로 숫자 표시 => 각 숫자에서 다른 숫자로 변환할 때 필요한 반전 개수
		num = new int[10][10];
		num[0] = new int[] {0, 4, 3, 3, 4, 3, 2, 3, 1, 2};
		num[1] = new int[] {4, 0, 5, 3, 2, 5, 6, 1, 5, 4};
		num[2] = new int[] {3, 5, 0, 2, 5, 4, 3, 4, 2, 3};
		num[3] = new int[] {3, 3, 2, 0, 3, 2, 3, 2, 2, 1};
		num[4] = new int[] {4, 2, 5, 3, 0, 3, 4, 3, 3, 2};
		num[5] = new int[] {3, 5, 4, 2, 3, 0, 1, 4, 2, 1};
		num[6] = new int[] {2, 6, 3, 3, 4, 1, 0, 5, 1, 2};
		num[7] = new int[] {3, 1, 4, 2, 3, 4, 5, 0, 4, 3};
		num[8] = new int[] {1, 5, 2, 2, 3, 2, 1, 4, 0, 1};
		num[9] = new int[] {2, 4, 3, 1, 2, 1, 2, 3, 1, 0};
		
		go(0,1,0,0);
		
		System.out.println(result-1); //자기 자신 빼고
	}
	
	//where = 지금 자리수, ten = 몇번째인지, now = 지금 숫자, cnt = 변경 개수
	private static void go(int where, int ten, int now, int cnt) {
		if(now > N || cnt > P) { //지금 숫자가 최대 층수보다 크거나 변경 개수 초과
			return;
		}
		
		if(where == K) { //자리수가 동일한 경우
			if(now!=0) { //0층은 없음
				result++;
			}
			return;
		}
		
		for(int i=0;i<10;i++) {
			go(where+1, ten*10, i*ten+now, cnt+num[X/ten%10][i]);
		}
	}	
}

 

'ALGORITHM' 카테고리의 다른 글

백준 1459 걷기 (Java)  (0) 2023.06.03
백준 2529 부등호 (Java)  (0) 2023.06.02
백준 9935 문자열 폭발 (Java)  (0) 2023.05.31
백준 16463 13일의 금요일 (Java)  (0) 2023.05.30
백준 1926 그림 (Java)  (1) 2023.05.29