rueki

SW Expert Academy 8673. 코딩 토너먼트1 본문

C, C++ 문제풀이

SW Expert Academy 8673. 코딩 토너먼트1

륵기 2020. 4. 14. 17:51
728x90
반응형

문제 링크 :

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW2Jldrqlo4DFASu&categoryId=AW2Jldrqlo4DFASu&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
    int T;
	cin>>T;
    for(int i=0;i<T;i++)
    {
    	int k=0;
        int num=0;
        int sum = 0;
        vector<int> v;
        vector<int> v2;
        cin>>k;
    	
        int p = pow(2,k); // 인원수]
       
        for(int z =0;z<p;z++)
        {
            cin>>num;
            v.push_back(num);
            }
        
        for(int a =0;a<k;a++){
        	for(int j=0;j<p;j+=2)
        	{	
            	int temp=0;
                
        		if(v[j]>v[j+1])
            	{
            		temp =v[j];
            		
              	}else
            	{
            		temp = v[j+1];
            		
            	}
                sum  += abs(v[j] - v[j+1]);
                v2.push_back(temp);
                
            	
                v.clear();
                v.assign(v2.begin(), v2.end());
                
        	}
        	v2.clear();
             p = p/2;
        }
        cout<<'#'<<i+1<<' '<<sum<<'\n';
    
    }
    return 0;
}

토너먼트 진행 시, 2의 k승 단위로 짜여지기 때문에, 라운드를 올라갈때마다, 나누기 2씩해서 라운드를 줄일 수가 있다.

라운드를 줄일 때마다 숫자들을 벡터에  할당하고 clear를 반복해서 벡터 사용을 반복할 수 있게 하였다.

               
       
   

위의 칸 수대로 줄이고 값을 비교해서 넣고, 출력할 값을 계속 더해서 출력하면 풀 수 있는 문제다.

728x90
반응형
Comments