Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Dijkstra Algorithm
- 삼성 청년 SW 아카데미
- 호스팅이란?
- 프록시
- 최단 경로
- 호스팅
- 서버 호스팅
- 뮤텍스
- Synchronization
- 클라우드 서버
- 플로이드 워셜
- 싸피
- 동기화
- 웹 호스팅
- 싸피 면접 후기
- 세마포어와 뮤텍스
- Proxy
- 세마포어
- SSAFY
- 프록시서버
- floyd-warshall
- 다익스트라 알고리즘
- 다익스트라
- 세마포어란?
- 플로이드 와샬
- 세마포어와 뮤텍스의 차이
- 뮤텍스란?
- Proxy Server
- 싸피 합격
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[백준][14888][Java] 연산자 끼워넣기 본문
www.acmicpc.net/problem/14888
문제풀이
연산자를 더하기 부터 곱하기 까지 차례대로 갯수를 가르쳐 주는데, N-1개만큼의 배열을 만들어 차례대로 연산자의 정보를 입력 받는다.
우선순위를 상관없이 완전 탐색 하면 됨으로 순열을 사용하여 N개의 수들을 계산하여 최대값과 최솟값을 최신화 하였다.
코드
import java.io.*;
import java.util.*;
public class Main{
static int N;
static long max, min;
static int[] num, oper, isSelected;
static boolean visited[];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
max =-1000000000;
min =1000000000;
num = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
oper = new int[N-1];
//연산자 입력받기
st = new StringTokenizer(br.readLine());
int index =0;
for(int i=0; i<4; i++) {
int leng = Integer.parseInt(st.nextToken());
for(int j=0; j<leng; j++) {
oper[index++] = i;
}
}
isSelected = new int[N-1];
visited = new boolean[N-1];
//순열
permutation(0);
System.out.println(max);
System.out.println(min);
}
private static void permutation(int cnt) {
if(cnt == N-1) {
int result = num[0];
for(int i=0; i<N-1; i++) {
int oper = isSelected[i];
switch (oper) {
case 0:
result += num[i+1];
break;
case 1:
result -= num[i+1];
break;
case 2:
result *= num[i+1];
break;
case 3:
result /= num[i+1];
break;
}
}
max = Math.max(result, max);
min = Math.min(result, min);
return;
}
for(int i=0; i<N-1; i++) {
if(visited[i] == true)continue;
isSelected[cnt] = oper[i];
visited[i] = true;
permutation(cnt+1);
visited[i] = false;
}
}
}
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준][16234][Java] 인구 이동 (0) | 2021.01.17 |
---|---|
[백준][13458][Java] 시험 감독 (0) | 2021.01.12 |
[백준][14499][Java] 주사위 굴리기 (0) | 2021.01.07 |
[백준][20055][Java] 컨베이어 벨트 위의 로봇 (0) | 2021.01.06 |
[백준][20056][Java] 마법사 상어와 파이어볼 (1) | 2021.01.05 |
Comments