본문 바로가기

BOJ/C++

[BOJ] 9019. DSLR

* 경로를 남기고, 역추적한다. 

* 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