[백준][C++] 10804번 카드 역배치
카드 역배치
문제 링크
분석
1부터 20까지의 카드가 순서대로 놓여있는 상태로 시작합니다.
입력으로 구간 a부터 b까지 주어지는데, 해당 구간의 순서를 뒤집어주어야 합니다.
해당 과정이 총 10번 이루어집니다.
결과는 카드들의 배치를 출력하면 됩니다.
풀이
#include <iostream>
// 카드 배열
int NumberList[20] = { 0 };
// 시작 인덱스부터 끝 인덱스까지 뒤집어주는 함수
void Reverse(int StartIndex, int EndIndex)
{
int ReverseCount = (EndIndex - StartIndex);
while (true)
{
int temp = NumberList[StartIndex];
NumberList[StartIndex] = NumberList[EndIndex];
NumberList[EndIndex] = temp;
++StartIndex;
--EndIndex;
if (StartIndex >= EndIndex)
{
return;
}
}
}
int main()
{
// 카드 배열 초기화
for (int i = 0; i < 20; ++i)
{
NumberList[i] = i + 1;
}
// 입력을 받고, 해당 값으로 배열을 뒤집는 반복문
for (int i = 0; i < 10; ++i)
{
int StartNumber, EndNumber;
std::cin >> StartNumber >> EndNumber;
Reverse(StartNumber - 1, EndNumber - 1);
}
// 출력
for (int i = 0; i < 20; ++i)
{
if (i != 0)
{
std::cout << " ";
}
std::cout << NumberList[i];
}
return 0;
}
성능 요약
시간 복잡도는 상수 시간에 끝나기 때문에 $O(1)$입니다.
공간 복잡도는 고정된 크기의 상수 공간을 사용하기 때문에 $O(1)$입니다.
메모리: 2020 KB
시간: 0 ms
댓글남기기