Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/백준oj

    [백준OJ] 21943번 연산 최대로 - Java

    2022. 12. 28.

    by. Hyeon-Uk

    반응형

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

     

    21943번: 연산 최대로

    $N$개의 양의 정수 $X_{i}$와 곱하기 연산자, 더하기 연산자가 총 $N - 1$개가 존재하고 괄호는 무수히 많이 사용해도 된다. 이 연산에는 곱하기 연산자와 더하기 연산자의 우선순위가 동일하다.

    www.acmicpc.net


    풀이

    백트래킹을 이용하여 모든 경우의수를 구해주었습니다.

    이때 만약 곱셈이 2개가 있다면, 아래와 같이 3개의 그룹을 생성해준 뒤, 곱해주며 갱신하는 방식으로 백트래킹을 진행했습니다.

    시간복잡도

    백트래킹의 시간복잡도이고, N개 각각 최대 N-1개의 선택지가 있기때문에 O(N^(N-1)) 이 됩니다.

     

    코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    
    public class Main {
        static int answer = 0;
    
        public static void dfs(int[] arr, int[] mult, int q, int ind) {
            if (ind == arr.length) {
                int result = Arrays.stream(mult).reduce(1, (x, y) -> x * y);
                answer = Math.max(answer, result);
                return;
            }
            for (int i = 0; i < mult.length; i++) {
                mult[i] += arr[ind];
                dfs(arr, mult, q, ind + 1);
                mult[i] -= arr[ind];
            }
        }
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.valueOf(br.readLine());
            int[] arr = new int[n];
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int i = 0; i < n; i++) {
                arr[i] = Integer.valueOf(st.nextToken());
            }
    
            st = new StringTokenizer(br.readLine());
            int p = Integer.valueOf(st.nextToken());
            int q = Integer.valueOf(st.nextToken());
            int[] mult = new int[q + 1];
    
            dfs(arr, mult, q, 0);
    
            System.out.println(answer);
    
        }
    }
    반응형
    저작자표시 (새창열림)

    '문제풀이 > 백준oj' 카테고리의 다른 글

    [백준OJ] 16985번 Maaaaaaaaaze - Java  (0) 2022.12.31
    [백준OJ] 18511번 큰 수 구성하기 - Java  (0) 2022.12.28
    [백준OJ] 12837번 가계부 (Hard) - Java  (0) 2022.12.28
    [백준OJ] 1473번 미로 탈출 (Java)  (0) 2022.12.28
    [백준OJ] 8980번 택배 (Java)  (0) 2022.12.27

    댓글

    관련글

    • [백준OJ] 16985번 Maaaaaaaaaze - Java 2022.12.31
    • [백준OJ] 18511번 큰 수 구성하기 - Java 2022.12.28
    • [백준OJ] 12837번 가계부 (Hard) - Java 2022.12.28
    • [백준OJ] 1473번 미로 탈출 (Java) 2022.12.28
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바