ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • O - [ 그리디 ] 02 곱하기 혹은 더하기 - R
    알고리즘/이코테 - 기출 2021. 10. 5. 17:31

    난이도 : 하  풀이시간 : 30/8  시간제한 : 1초  기출 : Facebook 인터뷰

    [ 그리디 ] 02 곱하기 혹은 더하기

     

    각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며

     

    숫자 사이에 'x' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요.

     

    단, + 보다 x를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다.

     

    예를 들어 02984라는 문자열로 만들 수 있는 가장 큰 수는 ((((0 + 2) x 9) x 8) x 4) = 576입니다.

     

    또한 만들어질 수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어집니다.

     

    :: 입력 조건

     

    첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어집니다. (1 <= S의 길이 <= 20)

     

    :: 출력 조건

     

    첫째 줄에 만들어질 수 있는 가장 큰 수를 출력합니다.

     


      아이디어  

    1. 문자열 s를 입력받고

    2. 각 자리의 숫자를 정수형으로 바꿔서 vector에 집어넣음

    3. 하나씩 꺼내서 꺼낸 숫자가 0 또는 1이거나 그 당시의 결과값이 0인 경우 더하기 수행

    그 이외의 경우 무조건 곱하기를 수행함

    4. 모든 연산이 끝나면 결과 출력 

     

      내   코드  

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <queue>
    #include <string>
    
    using namespace std;
    
    int main() {
    
    	vector<int> v;
    	string s;
    
    	cin >> s;
    
    	for (int i = 0; i < s.length(); i++) {
    		v.push_back(s[i] - '0');
    	}
    
    	int result = 0;
    
    	for (int i = 0; i < s.length(); i++) {
    		if (v[i] == 0 || v[i] == 1 || result == 0) {
    			result += v[i];
    		}
    		else result *= v[i];
    	}
    
    	cout << result;
    }

     

      정답  코드  

    #include <bits/stdc++.h>
    
    using namespace std;
    
    string str;
    
    int main(void) {
        cin >> str;
    
        // 첫 번째 문자를 숫자로 변경한 값을 대입
        long long result = str[0] - '0';
    
        for (int i = 1; i < str.size(); i++) {
            // 두 수 중에서 하나라도 '0' 혹은 '1'인 경우, 곱하기보다는 더하기 수행
            int num = str[i] - '0';
            if (num <= 1 || result <= 1) {
                result += num;
            }
            else {
                result *= num;
            }
        }
    
        cout << result << '\n';
    }

     

      리뷰  

    굳이 값을 벡터에 옮길 필요 없이 string에서 값을 추출해서 연산해도 된다는 걸 생각 못함

준생e