Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- SerialDate 리펙터링
- 클린코드
- 코딩 테스트
- java의 정석
- 2206번
- 프로그래머스
- 1300번
- 1043번
- DxTrace
- 11286번
- 10830번
- BOJ
- Design Pattern
- 자바의 정석
- programmers
- 냄새와 휴리스틱
- 코딩테스트
- springboot
- 11758번
- 9장
- 2156번
- 17장
- Spring
- 2166번
- Design Patterns
- java
- Dxerr.h
- 가장 긴 증가하는 부분 수열2
- Adapater Pattern
Archives
- Today
- Total
Don't give up!
[백준] 1107번 : 리모컨 (java) 본문
어떻게 생각하고 문제를 풀었는가?
N을 만드는 최소 값을 구하기 위해서 모든 경우의 수를 조사하는 Brute Force 방식을 사용하고자 하였습니다.
각 케이스에 해당하는 숫자가 에러 버튼을 눌러야 하는 경우를 제외하고 남은 케이스 중 눌러야 하는 버튼의 숫자가 가장 작은 값을 반환한다면 정답을 얻을 수 있을 것이라 생각하였습니다.
코드
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Solution sol = new Solution();
int N = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine());
boolean[] error = new boolean[10];
if(M>0){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<M; i++){
error[Integer.parseInt(st.nextToken())] = true;
}
}
System.out.println(sol.solution(N,error));
br.close();
}
}
class Solution{
boolean[] error;
public int solution(int N, boolean[] errArr){
if(N==100) return 0;
this.error = errArr;
int answer = Math.abs(N-100);
for(int i=0; i<1000001; i++){
String str = String.valueOf(i);
if(isValid(str)) answer = Math.min(Math.abs(N-i)+str.length(),answer);
}
return answer;
}
public boolean isValid(String str){
for(int j=0; j<str.length(); j++){
if(error[str.charAt(j)-'0']) return false;
}
return true;
}
}
Brute Force를 사용하여 정답을 찾는 코드입니다.
숫자 버튼은 0부터 9까지 존재하므로 크기가 10인 boolean 배열을 선언하여 어떤 숫자가 고장났는지 체크하고, 각 케이스의 문자열에 포함되지 않는다면 버튼의 수를 문자열의 길이 + |N-i|로 계산하여 최소 값을 저장합니다.
체널은 0부터 무한대만큼 존재하므로 N의 최대값인 500,000일때 0에서부터 1,000,000까지 경우의 수를 비교하여야 합니다.
'Coding Test > BOJ' 카테고리의 다른 글
[백준] 1013번: Contact (java) (0) | 2021.07.16 |
---|---|
[백준] 1030번: 프렉탈 평면 (java) (0) | 2021.07.14 |
[백준] 2580번 : 스도쿠 (java) (0) | 2021.07.12 |