본문 바로가기

알고리즘/SW Expert Academy

200916 [S/W 문제해결 기본] 1일차 - Flatten(C++) / 틀림

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

 

SW Expert Academy

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

swexpertacademy.com

문제:

주어진 횟수만큼 가장 높은 곳에 있는 칸을 가장 낮은 곳으로 옮깁니다(덤프). 작업이 끝난 후 가장 높은 곳과 가장 낮은 곳의 차이를 출력합니다. 이때 가장 높은 곳과 가장 낮은 곳의 차이가 0 또는 1이 되면 작업을 하지 않고, 그 상태에서의 차이를 출력합니다.

문제에서 테스트 케이스는 10번으로 주어졌고, 가로는 항상 100 세로 값의 범위는 1~100까지입니다. 작업 횟수인 덤프의 범위는 1~1000까지입니다.  

 

#include<iostream>
#include<algorithm>

using namespace std;

int main(int argc, char** argv)
{
	int test_case = 0, T = 0 ,answer = 0;
    for(int i=0; i<10; i++){
    	cin >> test_case;
        int temp[1000] = {0,};
        for(T; T<test_case; T++) cin >> temp[T];
        
        for(T; T<test_case; T++){
            sort(temp, temp+test_case);
        	if (temp[test_case] - temp[T] < 1){
                answer = temp[test_case] - temp[T];  
            	break;
            }
            answer = temp[test_case] - temp[T] ;
            temp[test_case]--;
            temp[T]++;
        }
        
        cout << '#' << i+1 << ' '<< answer << endl;
    }
	return 0;
}

코드:

최대값과 최소값이 계속 변하기 때문에 덤프 횟수만큼 반복문을 돌 때 처음 시작 부분에서 정렬 되도록 했습니다. 

최대값과 최소값이 1보다 작으면 그때의 차이를 답으로 저장하고, 반복문을 탈출합니다.

해당하지 않으면 break가 아니라 값에 변화를 주고 반복문을 계속 돌립니다.

 

-----------------------------------------------------------------------------------------------------------------------------------

아까처럼 답이 0으로 출력 되는데 집에서 확인 하겠습니다.