728x90
백준 23842번 성냥개비
https://www.acmicpc.net/problem/23842
23842번: 성냥개비
동빈이는 내일 TV 프로그램 '문제적 유니' 에 출연한다. 평소 애청자였던 동빈이는 성냥개비 문제가 자주 출제된다는 사실을 알았고, 오늘 예습하기로 했다. 성냥개비는 다음과 같이 숫자를 디지
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class Main {
static String ans;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine())-4;
int[] map = {6,2,5,5,4,5,6,3,7,6};
ans = "impossible";
perm(0, new int[6], map, N);
System.out.println(ans);
}
private static void perm(int cnt, int[] num, int[] map, int N) {
if(cnt==6) {
int total = 0;
for (int i = 0; i < 6; i++) {
total += map[num[i]];
}
if(total!=N) return;
int a = num[0]*10 + num[1];
int b = num[2]*10 + num[3];
int c = num[4]*10 + num[5];
StringBuilder answer = new StringBuilder();
if(a+b==c) {
answer.append(num[0]);
answer.append(num[1]);
answer.append("+");
answer.append(num[2]);
answer.append(num[3]);
answer.append("=");
answer.append(num[4]);
answer.append(num[5]);
ans = answer.toString();
System.out.println(ans);
System.exit(0);
}
return;
}
for (int i = 0; i <= 9; i++) {
num[cnt] = i;
perm(cnt+1, num, map, N);
}
}
}
잘 푼 점 :
1. character를 조합해서 출력해야하는 경우 + 로 이어가며 String을 만들지 않고 StringBuilder를 사용하였다. StringBuilder를 사용하면 그냥 String을 이어 붙이는 것보다 시간이 절약된다.
2. 답이 될 수 있는 걸 처음 찾자마자 System.exit(0)으로 프로그램을 강제 종료 시켜주었다. 다른 답을 찾지 않고 종료하므로 시간이 3분의 1가량 줄었다!
아쉬운 점 :
for (int i = 0; i <= 9; i++) {
num[cnt] = i;
perm(cnt+1, num, map, N);
}
이 부분에서 전체 N이 얼마나 남았는지 확인할 수 있었을 것이다. 즉, perm이 재귀로 불릴 때마다 num배열에 넣는 숫자에 필요한 성냥개비 개수를 바로바로 N에서 빼줄 수 있다. 이러면 나중에 또 for문을 돌려서 성냥개비 개수를 더해줄 필요가 없다.
반응형
'JAVA > 문제 풀이' 카테고리의 다른 글
[백준 / BOJ] 1644 소수의 연속합 (0) | 2023.08.07 |
---|---|
[백준 / BOJ 14714] 홍삼게임(Easy) (0) | 2023.08.06 |
[BOJ_17070] 파이프 옮기기 1 (0) | 2022.04.21 |
[BOJ_16235] 나무 재테크 (0) | 2022.03.02 |
아규먼트 유무에 따른 연산시간 변화(SWEA_7965) (0) | 2022.03.01 |