C++/코드트리

[코드트리] 숫자 2배 후 하나 제거하기

sondiaa 2023. 8. 9. 23:49

https://www.codetree.ai/missions/5/problems/multiply-two-and-remove-one-number?utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

완전탐색인데 케이스가 2가지이므로 중첩 완전탐색이며,, 값 초기화를 잘 해주어야 한다.

또한 중첩이 너무 많이 돼서 헷갈릴 때가 있어서 헷갈리지 않도록 유의해야겠다.

 

먼저 2배할 숫자를 체크해주고

다음으로 지울 index를 정하고 

임시배열에 지울 index를 제외한 나머지 값을 담아주고

담은 원소 값으로 인접한 원소 차이를 계산한다.

#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;
int n, map[100];
int main() {
    cin >> n;
    for(int i=0; i<n; i++){
        cin >> map[i];
    }
    int answer = 21e8;
    for(int i=0; i<n; i++){
        map[i] *= 2;
        for(int j=0; j<n; j++){
            int temp[100], cnt = 0;
            for(int k=0; k<n; k++){
                if(j == k ) continue;
                temp[cnt++] = map[k];
            }
            int sum = 0;
            for(int k=0; k<cnt-1; k++){
                sum = sum + (abs(temp[k] - temp[k+1]));
            }
            answer = min(answer, sum);
        }
        map[i] /= 2;
    }

    cout << answer;
    return 0;
}