Algorithm

[Algorithm] 곱하기 혹은 더하기

씬프 2021. 5. 31. 10:56
반응형

문제

각 자리가 숫자로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 곱하기 혹은 더하기 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

곱하기가 더하기의 우선권을 갖지 않고 무조건 왼쪽부터 연산이 진행된다.

 

입력 조건

첫째줄에 여러개의 숫자로 구성된 하나의 문자열 S

 

출력 조건

만들어질 수 있는 가장 큰 수

 

풀이

곱하기 연산과 더하기 연산의 결과가 더 큰 것을 가지고 가도록 생각했음.

왼쪽부터 계산하기 때문에 0번째부터 이웃한 숫자와의 더하기 연산과 곱하기 연산을 비교해

더 큰 경우를 저장해가면서 풀이했음. 그리고 배열의 마지막 인덱스에 저장된 값이 최대 값으로 판단함.

import java.util.*;

class Main {

  public static void main(String[] args) {
    
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLine();
    sc.close();

    int size = s.length();
    int[] num = new int[size];
    for (int i = 0; i < size; i++) {
      // char 형 숫자를 int로 변환
      num[i] = s.charAt(i) - '0';
    }

    System.out.println(Arrays.toString(num));
    
    for(int i = 0; i < size-1; i++) {
      int tmp = num[i] + num[i+1];
      int tmp2 = num[i] * num[i+1];
      if (tmp > tmp2) {
        num[i+1] = tmp;
      } else {
        num[i+1] = tmp2;
      }
    }

    System.out.println(num[size-1]);

  } // end main
}

하지만, 코드가 길어지고, 연산의 결과를 계속 수정해야 했음.

이보다 숫자가 0과 1인 경우만 더하기 연산을 하고 나머지는 곱하기 연산을 하도록

코드를 수정함.

import java.util.*;

class Main {

  public static void main(String[] args) {
    
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLine();
    sc.close();

    int result = s.charAt(0) - '0';

    for(int i = 1; i < s.length(); i++) {
      int tmp = s.charAt(i) - '0';
      if (tmp <= 1 || result <= 1) {
        result += tmp;
      } else {
        result *= tmp;
      }
    }

    System.out.println(result);

  } // end main
}

'Algorithm' 카테고리의 다른 글

[Algorithm] 문자열 뒤집기  (0) 2021.06.01
[Algorithm] 뱀  (0) 2021.05.31
[Algorithm] 모험가 길드  (0) 2021.05.30
[Algorithm] 커리큘럼  (0) 2021.05.29
[Algorithm] 도시 분할 계획  (0) 2021.05.28