[백준/BOJ] 12931. 두 배 더하기 [Gold 4]

jychan99·2022년 1월 21일
0
post-thumbnail
  1. 두 배 더하기

문제출처 : https://www.acmicpc.net/problem/12931

code

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int N, cnt = 0;
    bool isfinish = true , isdivide;
    cin >> N;
    vector<int>arr(N);
    for (int i = 0; i < N; i++)
        cin >> arr[i];

    while (isfinish)
    {
        isfinish = false;
        isdivide = false;
        for (int i = 0; i < N; i++)
        {
            if (arr[i] % 2 == 1 && arr[i] > 0)
            {
                arr[i]--;
                cnt++;
            }
            if (arr[i] != 0)
                isdivide = true;
        }

        if (isdivide)
        {
            for (int i = 0; i < N; i++)
                arr[i] /= 2;
            cnt++;
        }

        for (int i = 0; i < N; i++)
            if (arr[i]) isfinish = true;
    }

    cout << cnt;

    return 0;
}

조건을 그대로 따라려고하지말고 조건을 거꾸로 거슬러 올라간다고 생각하면 굉장히 쉽게 풀리는 문제이다.

profile
내가 지금 두려워 하고 있는 일이 바로 내가 지금 해야 할 일이다. 🐥

0개의 댓글