문제 풀이 과정을 공유하고자 한다.
문제 출처
1. 문제설명
- x, y, n이 주어진다.
1 <= x <= y <= 1,000,000
- 사용 연산
x
에 n
을 더한다.
x
에 2를 곱한다.
x
에 3을 곱한다.
- 연산을 최소로 사용하여 x를 y로 만들자.
2. 알고리즘 설계
- 연산을 최소로 사용하여 == BFS
- ++DP를 이용하는 방법도 있다.
3. 로직
- BFS
queue
에서 꺼냈을 때 y랑 같아지면 그 때의 weight
를 리턴
q.empty()
까지 못 찾으면 -1 리턴
- DP
memo[i*2] = min(memo[i*2], min[i] + 1)
- 위와 같이 숫자와 연산자만 바꿔서 갱신한다.
- x<=i<=y의 만큼 for문을 실행한다.
4. 전체 코드
5. 소감
- 일반적인 BFS처럼
next
좌표가 0보다 작아지는 경우를 신경쓰지 않아도 된다.
x
, n
모두 1 이상의 값이기 때문이다.
- 사실 이 문제는 오래 전 00소프트 코딩테스트에서 유사한 문제가 출제되었었다.
- 그 때는 못 풀었는데… 지금은..! 좀 더 노력하자