처음 접근 방식
이 문제를 처음 접근했을 때는, 입력받은 수를 문자열로 나눠서 여러 경우의 수를 고려해 주려고 했었다.
하지만 그러한 방식을 생각했을 때, 고려해 줘야 할 상황이 너무 많았고 결국 해결할 수 없었다.
그래서 여러 블로그들을 찾아 보았고, 이 문제는 브루트 포스라는 방법으로 푸는 문제라고 한다.
브루트 포스는 간단하게 말하자면 그냥 전수 조사와 같은 것이다.
모든 경우를 저언부 다 찾아주는 것이다.
풀이 방법
문제를 풀기 위해 생각할 때, 먼저 크게 두 가지를 생각해야 한다.
1. 처음부터 +, -로 계산한 것이 최소일 때.
2. 숫자 버튼으로 이동하여 +,-를 통해 구한 값이 최소일 때.
1번은 너무 간단하다. 처음 시작 값이 100번이라고 했으니 num = abs(100 - n)으로 구해주었다.
2번은 조금 생각을 해야 한다.
문제의 n 값의 범위는 50만인데, 위 코드를 보면 100만으로 설정이 되어있다.
그 이유는 최악의 경우까지 고려해야 하기 때문이다.
예를 들어, 리모콘이 8과0 빼고 다 고장난 상태라고 하고 n이 50만이라고 한다면 +, -로는 49만9천9백이 되야 한다.
하지만 80만으로 간 다음, +, -로 50만까지 계산한 것이 더 효율적이기 때문에 넉넉하게 0~100만으로 잡은 것이다.
이러한 방식으로, 전수조사를 통해 num = abs(100 - n)보다 작은 값이 나오면 그 값으로 교체해주는 방식으로 문제를 해결하였다.
'개발 > 알고리즘' 카테고리의 다른 글
[BOJ] 탈출_3055 (0) | 2021.02.21 |
---|---|
[BOJ] 구슬 탈출 2_13460 (0) | 2021.02.20 |
이진 탐색(Binary Search)란? (0) | 2021.02.17 |
[BOJ] 트리의 지름_1167 (0) | 2021.02.16 |
[BOJ] 계단 오르기_2579 (0) | 2021.02.03 |