* 경로를 남기고, 역추적한다.
* visited[i] = j 는 i가 되기 전의 숫자가 j임을 표시한다.
op[i] = i가 되기 위한 연산을 저장한다.
* a = 시작점 일 때, visited[a] = -2로 저장한다. (이 표식을 발견하면 역추적을 중지한다.)
* a가 b가 되었을 때, 역추적을 하면서 벡터에 사용한 연산들을 저장한다.
* a가 b가 아니라면, D ,S, L, R 연산을 진행하면서 만들어진 숫자들을 모두 큐에 넣는다.
중복 탐색을 방지하기 위해 이미 한 번 생성된 숫자는 더 이상 탐색하지 안흔ㄴ다.
* 이 문제는 L, R 연산을 효율적으로 작성하는 게 중요하다.
deque, string 등은 시간이 초과된다.
L : d2 d3 d4 d1 이므로 가장 마지막 숫자를 추출한다. (n = num / 1000)
나머지 d2, d3, d4 를 구한 후에 (tmp = num % 1000) 자리수를 늘려준다. (*10)
두 수를 더한다.
n + tmp
R : d4 d1 d2 d3 이므로 가장 마지막 숫자를 가져온다. (n = num % 10)
나머지 d1,d2,d3을 구한 후에 n * 1000 + d1,d2,d3를 한다.
'BOJ > C++' 카테고리의 다른 글
[BOJ] 17298. 오큰수 (0) | 2020.04.25 |
---|---|
[BOJ] 4378. 트ㅏㅊ; (0) | 2020.04.25 |
[BOJ] 17085. 십자가 2개 놓기 (0) | 2020.04.20 |
[BOJ] 16939. 2X2X2 큐브 (0) | 2020.04.20 |
[BOJ] 16932. 모양 만들기 (0) | 2020.04.20 |