백준 1021 c++

magicdrill·2024년 2월 22일

백준 문제풀이

목록 보기
18/673

백준 1021 c++

#include <iostream>
#include <deque>
#include <vector>

using namespace std;

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, M, i, j, temp, total_count = 0, size;
	int left = 0, right = 0;
	vector <int> vi;
	deque <int> circle;
	
	cin >> M >> N;

	//찾을 값 저장
	for (i = 0; i < N; i++)
	{
		cin >> temp;
		vi.push_back(temp);
	}

	//덱 초기화
	for (i = 1; i <= M; i++)
	{
		circle.push_back(i);
	}

	//total_count 값 찾기
	for (i = 0; i < N; i++)
	{
		//vi[i] 각각 원소에 따라 수행
		size = circle.size();

		for (j = 0; j < size; j++)//left와 right 중 짧은 거리 찾기
		{
			if (circle[j] == vi[i])
			{
				right = j;
				left = size - j;
				break;
			}
			else
			{
				;
			}
		}

		if (right <= left)//오른쪽으로 가는 거리가 더 짧을 경우
		{
			while (1)//3번 연산
			{
				if (circle.front() == vi[i])
				{
					break;
				}
				else
				{
					circle.push_back(circle.front());
					circle.pop_front();
					total_count++;
				}
			}
		}
		else//왼쪽으로 가는 거리가 더 짧을 경우
		{
			while (1)//2번 연산
			{
				if (circle.front() == vi[i])
				{
					break;
				}
				else
				{
					circle.push_front(circle.back());
					circle.pop_back();
					total_count++;
				}
			}
		}
		circle.pop_front();//1번 연산
	}
	
	cout << total_count << "\n";

	return 0;
}

0개의 댓글