백준 2346 - 풍선 터뜨리기

황재진·2024년 3월 16일

백준

목록 보기
26/54
post-thumbnail

덱 자료구조를 이용해 풀 수 있는 문제입니다. 그러나, 저는 덱 자료구조 말고 다른 방식으로 해결했습니다.

이미 체크한 요소는 건너뛰고 체크하지 않은 요소에 도착하면 값을 더하면서 목표지점에 도달할 때까지 반복해 해결했습니다.

#include <iostream>
#include <cmath>

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

	int n;
	std::cin >> n;

	int* nums = new int[n];

	int num;
	for (int i = 0; i < n; i++)
	{
		std::cin >> num;
		nums[i] = num;
	}

	int pos = 0;
	for (int i = 0; i < n; i++)
	{
		int nMult = std::abs(pos) / n + 1;
		if (pos < 0)
			pos += nMult * n;

		int temp = nums[pos % n] + pos;
		int dir = nums[pos % n] > 0 ? 1 : -1;
		std::cout << (((pos + 1) % n == 0) ? n : (pos + 1) % n) << " ";
		
		nums[pos % n] = -10000;

		bool isAvail = false;
		for (int j = 0; j < n; j++)
			if (nums[j] != -10000)
			{
				isAvail = true;
				break;
			}
		if (!isAvail)
			break;

		while (pos != temp)
		{
			nMult = std::abs(pos) / n + 1;
			if (nums[(pos + n * nMult + dir) % n] == -10000)
				temp += dir;
			pos += dir;
		}
	}

	return 0;
}
profile
프로그래밍, 쉐이더 등 이것저것 다해보는 게임 개발자입니다

0개의 댓글