문제
S 1 ~ S N 이라는 N 개의 스택 이 있고 각 S k (k = 1 ~ N)에 숫자 k의 N 복사본이 포함되어 있다고 가정 해보십시오.
예를 들어 N = 3 인 경우 스택은 다음과 같습니다.
1 2 3 <- top of stack
1 2 3
1 2 3 <- bottom of stack
=======
1 2 3 <- stack index
여기에는 1, 2 및 3으로 인덱스 된 3 개의 스택이 있으며 각 스택에는 자체 인덱스의 N 개의 인스턴스가 있습니다.
목표는 각각의 스택이 위에서 아래로 순서대로 1에서 N까지의 숫자를 동일하게 포함하도록 N 스택을 재정렬하는 것입니다.
예를 들어 N = 3의 경우 목표는 스택을 다음과 같이 재배 열하는 것입니다.
1 1 1
2 2 2
3 3 3
=======
1 2 3
스택으로 수행 할 수있는 유일한 작업은 스택 중 하나에서 최상위 번호를 가져와 (포핑) 즉시 다른 스택 위에 배치하는 것입니다 (푸싱) . 이것은 다음 규정에 따릅니다.
해당 스택의 최상위 숫자보다 작거나 같은 경우에만 숫자를 스택에 푸시 할 수 있습니다.
예에서는
1
기호가있는 스택으로 푸시 될 수있다1
,2
또는3
상단되지만은2
오직 함께 스택에 푸시 할 수2
또는3
상단에 (또는 그 이상).이는 스택이 항상 단조 증가 하는 효과가 있습니다.
비어 있지 않은 스택은 팝될 수 있으며, 이전 글 머리표가 만족되는 것으로 가정하면 모든 스택이 푸시 될 수 있습니다.
빈 스택에 숫자를 넣을 수 있습니다.
스택에는 최대 높이 제한이 없습니다.
스택은 생성하거나 파괴 할 수 없으며 항상 N 개가 있습니다.
이 과제는 스택 교환을 완료하기 위해 팝과 푸시를 결정하는 것입니다. 반드시 최소한의 움직임이 아닌 확실한 방법으로해야합니다.
(갑판으로 연습하는 것이 문제에 대한 느낌을 얻는 좋은 방법입니다.)
도전
양의 정수 N을 취하고 3 이상으로 보장되는 프로그램이나 함수를 작성하십시오. 스택을 초기 상태에서 재정렬하는 데 필요한 모든 팝 푸시 동작을 나타내는 문자열을 인쇄하거나 반환하십시오.
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
=============
1 2 3 4 5
(N = 5 건)
최종 상태로 :
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
=============
1 2 3 4 5
출력의 모든 줄은 공백으로 구분 된 두 개의 숫자를 포함해야합니다. 첫 번째 숫자는 팝할 스택의 인덱스이고 두 번째 숫자는 푸시 할 스택의 인덱스입니다. 모든 라인의 동작을 순서대로 수행하면 규칙을 어 기지 않고 스택을 올바르게 정렬해야합니다.
예를 들어, 다음은 N = 3 경우에 유효한 잠재적 출력입니다.
1 2 [move the top number on stack 1 to the top of stack 2]
1 2 [repeat]
1 2 [repeat]
3 1 [move the top number on stack 3 to the top of stack 1]
2 3 [etc.]
2 3
2 3
2 1
2 1
2 1
3 1
3 1
3 1
3 2
1 2
1 2
1 2
1 3
2 3
2 3
2 3
1 2
3 2
3 1
노트
출력은 최적 일 필요 는 없으며 정확해야합니다. 즉, 팝 및 푸시 횟수를 최소화 할 필요가 없습니다.
- 예를 들어, 어떤 움직임이 반복적으로 발생하고 즉시 반대로 바뀌면 괜찮을 것입니다.
- 예를 들어
2 2
, 한 번의 이동으로 동일한 스택을 퍼핑하고 밀어 넣는 것도 허용됩니다 (물론 무의미 함).
결과 는 결정적이고 유한해야합니다.
스택에는 1 기반 인덱싱이 있습니다. 0 기반 인덱싱은 허용되지 않습니다.
9보다 큰 N은 물론 한 자릿수 N과 마찬가지로 작동해야합니다.
원하는 경우 공백과 줄 바꾸기 대신 숫자가 아닌 두 개의 인쇄 가능한 ASCII 문자를 사용할 수 있습니다 . 출력에서 후행 줄 바꿈 (또는 줄 바꿈 대체)이 좋습니다.
채점
바이트 단위의 가장 짧은 코드가 이깁니다. Tiebreaker가 더 높은 투표 응답입니다.
알고리즘이 최적임을 보여줄 수 있다면 무가치 한 브라우니 포인트.
-._(._.)_.-
N=3
최적 의 경우에 포함 할 수있는 출력이 있습니까?