728x90
반응형
https://www.acmicpc.net/problem/1107
고장나지 않은 버튼들을 이용해서 채널N에 가장 근접한 채널을 찾아서..풀려고 했다.
N보다 크거나 같은 수로 접근하는 것 하나, N보다 작거나 같은 수로 접근하는 것 하나씩 만들어서
두 경우를 비교하려고 했다.
숫자를 한 자릿수씩 끊어서, 그 숫자에 해당하는 버튼이 고장났다면 숫자를 1 올려보고.. 이런식으로 만들려 했는데..
너무나도 고려할 부분이 많았다.
(버튼 9를 쓰지 못하는 경우에 더 큰 수로 접근하려면 자릿수를 하나 올려야하는데.. 9에서 10이 되면 1과0버튼 두개를 고려해야하고... 너무 골치아프다)
(버튼 0을 못 쓸 때 더 작은 수를 만드는 것도 마찬가지로 내가 할 수가 없음...)
한참을 헤매다 결국 검색해보고
브루트포스로 풀었다는 사람들의 글을 읽고 참고 한 후
다시 혼자 작성했다.
.
.
1부터 100만까지의 수를
버튼으로 만들 수 있는 수라면 해당 경우의 카운트를 세고
버튼이 고장나서 만들 수 없다면 해당 경우는 넘긴다.
이렇게 모든 경우의 수를 싹~ 다 조사해서 가장 작은 카운트의 값을 결과로 내보낸다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;
public class P1107 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// String n=br.readLine();
int m = Integer.parseInt(br.readLine());
HashSet<Integer> broken = new HashSet<>();
if (m != 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
while (st.hasMoreTokens()) {
broken.add(Integer.parseInt(st.nextToken()));
}
}
int result = Math.abs(n - 100);
for (int i = 0; i < 1000000; i++) {
int count = 0;
if ((count = check(i, broken)) != -1) {
count += Math.abs(i - n);
result = Math.min(result, count);
} else
continue;
}
System.out.println(result);
}
static int check(int n, HashSet<Integer> broken) {
String num = Integer.toString(n);
boolean canMake = true;
for (int i = 0; i < num.length(); i++) {
if (broken.contains(num.charAt(i) - '0')) {
canMake = false;
break;
}
}
if (canMake == true) {
return num.length();
} else
return -1;
}
}
- 값 비교(min, max 등) 지수계산, 로그계산 등에 Math클래스를 사용할 수 있다.
- Integer.toString(num)으로 숫자를 문자열로 바꿀 수 있다
- 문자열로 변환한 숫자는 stringNum.length()로 숫자의 길이를 구할 수 있다.
- stringNum.charAt(i)-'0' 으로 i번째 자릿수의 숫자를 int형으로 구할 수 있다.
728x90
반응형
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 1449번: 수리공 항승 (0) | 2023.01.02 |
---|---|
[자바] 백준 2812번: 크게 만들기 (0) | 2023.01.01 |
[자바] 백준 1092번: 배 (1) | 2022.12.31 |
[자바] 백준 1049번: 기타줄 (0) | 2022.12.31 |
[자바] 백준 16953번: A -> B (0) | 2022.12.30 |
댓글