• 티스토리 홈
  • 프로필사진
    학페
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
학페
  • 프로필사진
    학페
    • 분류 전체보기 (38)
      • Baekjoon Online Judge (30)
        • C++ (30)
      • Data structure & Algorithm (7)
      • Java (1)
        • Java Spring (0)
        • Spring 공부하며 정리하는 개념들 (1)
      • Open API (0)
      • 일상 이야기 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • BOJ - 풍선 터뜨리기 (2346번)
        2024년 12월 09일
        • 학페
        • 작성자
        • 2024.12.09.:01

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

         

        배열을 사용하여 풀었습니다.

        문제 풀기 전에 어떻게 접근해야할지 공책에 적으면서 했어요.

        대략적인 접근 방법은 아래와 같습니다.

        /*
        	함수를 만들어서 순서가 담긴 벡터를 리턴값으로 했습니다.
            리턴하는 벡터는 이름이 v 입니다.
            
            int tmp = balloons[1];
            v.push_back(1);
            balloons[1] = 0;
            
            while(v.size() != n){
            	if (tmp > 0)
              	  if(현재 인덱스 != n)
                		if(balloons[현재인덱스] != 0)
                  		  	tmp--;
                   		    현재인덱스++;
                  else (현재인덱스 == n)
                 		현재 인덱스 = 1;
                    	tmp--;
            	else if (tmp < 0)
                	 if(현재 인덱스 != n)
                		if(balloons[현재인덱스] != 0)
                  		  	tmp++;
                   		    현재인덱스--;
                     else (현재인덱스 == 1)
                 		현재 인덱스 = n;
                    	tmp++;
                 else (tmp == 0)
                 	tmp = ballons[현재인덱스];
                    balloons[현재인덱스] = 0;
                    v.push_back(현재인덱스)
            }
        */

         

        위의 방법에서 조금 추가해서 적은 게 아래의 소스코드 입니다. 크게 다르지는 않습니다.

        차근차근 한 덕분에 한 번에 맞췄네요. 다행입니당.

         

        제가 작성한 코드는 아래와 같습니다.

        더보기
        #include <iostream>
        #include <stack>
        #include <queue>
        #include <deque>
        #include <string>
        #include <unordered_map>
        #include <vector>
        #include <algorithm>
        using namespace std;
        typedef long long int ll;
        vector<int>func(int n);
        int balloons[1001];
        
        int main() {
        	ios_base::sync_with_stdio(false);
        	cin.tie(NULL);
        	int n;
        	cin >> n;
        	vector <int> result;
        	for (int i = 1; i <= n; i++)
        		cin >> balloons[i];
        	
        	result = func(n);
        	
        	for (int i = 0; i < result.size(); i++)
        		cout << result[i] << ' ';
        	
        	return 0;
        }
        vector<int> func(int n) {
        	vector<int>v;
        	int tmp = balloons[1], index = 1; // 첫 시작은 1번 풍선
        	v.push_back(1); // 1번을 터뜨림
        	balloons[1] = 0; 
        	while (v.size() != n) {
        		if (tmp > 0) { // 우측으로 가기
        			if (index != n) { // 끝 지점인지 확인
        				index++;
        				if (balloons[index] != 0) {
        					// 안 터진 풍선인 경우만 이동 횟수 감소
        					tmp--;
        				}
        				else
        					continue;
        			}
        			else { 
        				// 끝지점 일 때
        				index = 1; // 맨 왼쪽으로 이동
        				if (balloons[index] != 0) {
        					// 안 터진 풍선인 경우만 이동 횟수 감소
        					tmp--;
        				}
        				else
        					continue;
        			}
        		}
        		else if (tmp < 0) {
        			if (index != 1) { // 가장 왼쪽이 아니다.
        				index--;
        				if (balloons[index] != 0) {
        					// 안 터진 풍선인 경우만 이동 횟수 증가 (음수라서)
        					tmp++;
        				}
        				else
        					continue;
        			}
        			else {
        				// 가장 왼쪽이다.
        				index = n; // 맨 오른쪽으로 이동
        				if (balloons[index] != 0) {
        					// 안 터진 풍선인 경우만 이동 횟수 증가 (음수라서)
        					tmp++;
        				}
        				else
        					continue;
        			}
        		}
        		else { // 풍선을 터뜨려야 하는 위치 tmp == 0
        			tmp = balloons[index];
        			balloons[index] = 0;
        			v.push_back(index);
        		}
        	}
        	return v;
        }

        'Baekjoon Online Judge > C++' 카테고리의 다른 글

        BOJ - 정규형 (4882번)  (0) 2025.03.23
        BOJ - 영단어 암기는 괴로워 (20920번)  (0) 2024.12.16
        BOJ - 덱 2 (28279번)  (0) 2024.12.08
        BOJ - 큐 2 (18258번)  (0) 2024.12.07
        BOJ - 도키도키 간식드리미 (12789번)  (0) 2024.12.06
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바