문제
문제 이해
처음에 실제 리모컨 누르는 로직을 생각했습니다.
ex) 5457중에 6,7,8이 고장났다.
5 누르고 -> 목표 값과의 최소 확인
54 누르고 -> 목표 값과의 최소 확인
545 누르고 -> 목표 값과의 최소 확인
5457 누르고 -> 목표 값과의 최소 확인
이렇게 접근을 했는데 로직이 복잡해지고 만약 고장난 수를 제외하면 모든 수를 파악할 수가 없었습니다.
다른사람의 풀이를 참고했을때 허망함을 느꼈습니다. 그냥 0~1,000,000까지 수열을 돌리고 그중에 고장난 버튼수를 제외합니다. 그리고 목표값과 거리가 가장 작은 수를 찾습니다.
이게 부르트포스 인가.. 하고 느꼈습니다.
근데 채널의 수는 0~ 500,000까지 인데 1,000,000을 넣는가?
수빈이가 이동하려는 채널은 0~ 500,000까지, 채널의 수는 무한대 수빈이는 500,000에 가려면 500,001 채널에서 -를 누를 수도 있습니다.
ex) 만약에 수빈이가 이동하려는 채널이 500,000이고, 리모컨의 숫자 중 1, 2, 3, 4, 5가 고장났다고 가정해봅니다.
이 때, range의 범위가 500,000으로 제한되면, 시작점인 100번에서 +만 눌러서 500,000까지 도달하는 총 499,900번 버튼을 클릭합니다. 이것은 최적의 해가 아닙니다.
600,000에서 -를 100,000번 눌러 target에 도달하는 것이 최적의 해입니다.
이러한 이유 때문에 range는 1,000,000까지로 설정해주어야 한다.
참고
https://seongonion.tistory.com/99?category=852500
'알고리즘 > 백준알고리즘' 카테고리의 다른 글
[백준 알고리즘/Python] 1748 수 이어 쓰기1 (0) | 2022.02.18 |
---|---|
[백준 알고리즘/Python] 6064 카잉 달력 (0) | 2022.02.16 |
[백준 알고리즘/Python] 1476 날짜 계산 (0) | 2022.02.14 |
[백준 알고리즘/Python] 3085 사탕 게임 (0) | 2022.02.13 |
[백준 알고리즘/Python] 2309 일곱 난쟁이 (0) | 2022.02.13 |