본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 4084 : Viva la Diferencia

반응형

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

 

4084번: Viva la Diferencia

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, a, b, c, d가 순서대로 주어진다. 입력의 마지막 줄에는 0이 4개 주어진다. (1 ≤ a,b,c,d ≤ 2,000,000,000)

www.acmicpc.net

구현문제였습니다.

📕 풀이방법

📔 입력 및 초기화

 while loop를 4개의 원소가 모두 0일 때까지 돕니다. 매 loop마다 vector num에 4개의 원소를 입력받습니다.몇 번째 수열인지 출력하기 위한 변수 cnt를 선언 후 0으로 초기화합니다.

📔 풀이과정

수렴하는지 검사하는 함수 isConvergence가 false인 동안 while loop를 수행합니다. 매 수열마다 cnt++과 다음 수열을 구하는 함수 getNextSequence를 수행합니다.

📔 정답출력

cnt를 출력합니다.


📕 Code

#include <bits/stdc++.h>
#define ll long long
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

bool isConvergence(vector <ll> num){
    if(num[0] == num[1] && num[1] == num[2] && num[2] == num[3]) return true;
    return false;
}

vector<ll> getNextSequence(vector <ll> num){
    vector <ll> tmp(4);
    tmp[0] = abs(num[0] - num[1]);
    tmp[1] = abs(num[1] - num[2]);
    tmp[2] = abs(num[2] - num[3]);
    tmp[3] = abs(num[3] - num[0]);
    return tmp;
}

int main(){
    fastio;
    while(1){
        int cnt = 0;
        vector <ll> num(4);
        for(int i = 0; i < 4; i++) cin >> num[i];
        if(!num[0] && !num[1] && !num[2] && !num[3]) break;
        while(!isConvergence(num)){
            cnt++;
            num = getNextSequence(num);
        }
        cout << cnt << '\n';
    }
}