컴굥일지

[BOJ/백준 2346][C++] 풍선 터뜨리기 본문

알고리즘/코테 문제

[BOJ/백준 2346][C++] 풍선 터뜨리기

gyong 2021. 7. 11. 22:46
반응형

백준 2346 풍선 터뜨리기

 

문제 링크

https://www.acmicpc.net/problem/2346

 

2346번: 풍선 터뜨리기

첫째 줄에 자연수 N(1≤N≤1,000)이 주어진다. 다음 줄에는 차례로 각 풍선 안의 종이에 적혀 있는 수가 주어진다. 편의상 0은 적혀있지 않다고 가정하자.

www.acmicpc.net

 

문제 내용

N개의 풍선이 있고, 풍선 안의 수가 적혀있다. 풍선은 1번부터 터뜨리며, 터뜨린 풍선 안에 적혀있는 수만큼 이동하여 풍선을 또 터뜨린다. 단, 움직일 땐 터뜨린 풍선은 제외하고 생각한다.

 

문제 풀이

 

코드

#include <iostream>
#include <vector>
using namespace std;

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

	int n; cin >> n;
	vector <int>v(n);
	for (int i = 0; i < n; i++) cin >> v[i];

	int num;
	int index = 0;

	for (int i = 0; i < n; i++) {
		cout << index+1<<' '; //풍선 번호 출력(풍선은 1번부터)
		num = v[index]; //내용물 확인

		v[index] = 0; //풍선 터트림 -- 0은 적혀있지 않다고 했기 때문
	

		if (i == n - 1) { //마지막은 내용물을 확인하여 index 계산이 필요가 없다.
			cout << '\n';
			break;
		}

		if (num > 0) { //내용이 양수일 때
			for (int j = 0; j < num; j++) {
				index = (index + 1) % n; //범위를 넘어갔을 때 조정
				if (v[index] == 0) j--;
			}
		}
		else { //내용이 음수일 때
			for (int j = 0; j < -num; j++) {
				index = (index - 1);
				if (index < 0) index += n; //범위를 넘어갔을 때 조정
				if (v[index] == 0) j--;
			}
		}
		
	}

	return 0;
}

 

느낀점

인덱스를 유지하기 위해 vector가 아니라 그냥 배열을 써서 했다. 이 부분을 떠올리는게 조금 헷갈렸고, index 계산하는 것이 어려웠다.

반응형
Comments