숫자 회전 (4자리 한정)

반응형
반응형

참고 문제

 

9019번: DSLR

네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 �

www.acmicpc.net

이 문제를 풀다가...

숫자를 회전을 해야하는 상황이 발생하였다.

원래는 String배열에 값을 넣은뒤 값을 이동시키는 방법을 사용했었는데

이 방법을 사용할시 시간 초과가 발생하였다.

그렇기 때문에 이 방법을 인터넷에서 방법을 찾았다.

시간이 조금 지나고 나니 정답으로 처리되었다.

new Node((n % 1000 ) * 10 + n / 1000 , str + "L"),
new Node((n % 10) * 1000 + (n / 10), str + "R")};

왼쪽 : (n % 1000) * 10 + n / 1000

오른쪽 : (n % 10) * 1000 + (n / 10)

물론 이 문제에서는 숫자 4개를 가지고서 회전하는 방법을 선택하였지만...이것을 이용하면 될것 같다.

예를 들어 n이 129라고 하자.

그러면 4자리를 만들어야 하기 때문에 0129가 된다.

그러면

129 에서 1000을 나눈 값은 129이구 여기다 10을 곱해준다.

그러면 1290이된다. 실제루 1290은 0129를 회전한 결과다. 

그러면 원래 네자리는 어떨까?

1234라면 4123 이된다.

잘 보면 4는 n/1000이 된다.

왼쪽은 어렵지 않았지만

문제는 오른쪽이었다.

왼쪽과 오른쪽은 반대이기 때문에 서로 반대로 했다. 이렇게 하면 숫자가 4자리일때 회전이 된다.

 

반응형

'알고리즘 > 코테 알고리즘 정리 노트' 카테고리의 다른 글

LinkedList  (0) 2020.12.06
배열 90도 회전 (코드만 존재 설명 X)  (0) 2020.10.29
위상 정렬  (0) 2020.10.01
크루스칼 알고리즘  (0) 2020.10.01
서로소 집합 알고리즘  (0) 2020.10.01

댓글

Designed by JB FACTORY