[BOJ] 백준 14888. 연산자 끼워넣기

2024. 4. 23. 21:34· 카테고리 없음

문제

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

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱

www.acmicpc.net


풀이

백트래킹 문제입니다. 연산자별로 입력받은 수를 통해, 연산자의 순서를 정하고 계산을 수행하면 됩니다.

 

 순열을 통해 연산자의 순서를 결정할 수 있는데, 일반적인 순열 재귀 시 사용하는 visited 배열을 int[]로 선언하여, 해당 연산자 사용 시에는 해당하는 인덱스 값을 --해주는 것이 문제의 포인트입니다. 

 

아래는 소스 코드입니다.


소스코드

import java.util.Scanner;

public class B14888_연산자끼워넣기 {

    static int N;
    static int[] nums;
    static int[] operators = new int[4];
    static int[] selected;
    static int[] visited;
    static int min = Integer.MAX_VALUE;
    static int max = Integer.MIN_VALUE;
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        input();

        selected = new int[N-1];
        visited = new int[4];
        visited = operators.clone();

        perm(0);
        System.out.println(max);
        System.out.println(min);
    }

    static void input(){
        N = sc.nextInt();
        nums = new int[N];
        for(int i = 0;i<N;i++){
            nums[i] = sc.nextInt();
        }
        for(int i = 0;i<4;i++){
            operators[i] = sc.nextInt();
        }
    }

    static void perm(int idx){
        if(idx==N-1){
            calculate(selected);
        }
        else{
            for(int i = 0; i<4;i++){
                if(visited[i]>0) {
                    visited[i]--;
                    selected[idx]=i;
                    perm(idx+1);
                    visited[i]++;
                }
            }
        }
    }

    static void calculate(int[] selected){
        int num = nums[0];

        for(int i = 0;i<N-1;i++){
            if(selected[i]==0) num +=nums[i+1];
            if(selected[i]==1) num -=nums[i+1];
            if(selected[i]==2) num *=nums[i+1];
            if(selected[i]==3) num /=nums[i+1];
        }
        max = Math.max(max,num);
        min = Math.min(min,num);
    }
}
동구름이
동구름이
동구름이
동구름
동구름이
전체
오늘
어제
  • 분류 전체보기 (178)
    • Java (63)
      • Java 를 파헤쳐보자 (13)
      • BOJ (45)
      • 프로그래머스 (3)
      • SWEA (1)
      • Java GUI (1)
    • JavaScript (17)
      • JS를 파헤쳐보자 (7)
      • 프로그래머스 (7)
      • JS 학습 정리 (1)
    • Backend (33)
      • Spring (3)
      • HTTP (7)
      • 프로젝트 (10)
      • MySQL (6)
      • Redis (3)
      • Elastic Search (1)
      • 인증, 인가 (3)
    • CS (57)
      • 운영체제 (35)
      • Network (22)
    • Git (2)
    • 개발 관련 이것저것 (2)
    • etc (1)
    • 독서 (0)
    • 사설 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 반효경
  • Java
  • 이석복
  • 구현
  • 스택
  • JCF
  • 인프런
  • 운영체제
  • 한양대
  • 레디스
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • 큐
  • 자바
  • BOJ
  • 김영한
  • 백준
  • 자바스크립트
  • 네트워크
  • OS
  • 프로그래머스

최근 글

hELLO · Designed By 정상우.v4.2.2
동구름이
[BOJ] 백준 14888. 연산자 끼워넣기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.