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
- parseInt()
- jquery 속성선택자
- str to char array
- inner class
- char to str
- Java
- 상속
- 순열코드
- 서로소
- jquery 필터선택자
- 자바 조합 재귀
- Interface
- 재귀
- 자바스크립트 이벤트처리
- 자바 순열 코드
- jquery dom 계층 선택자
- java Collections.sort()
- 알고리즘 그래프
- 알고리즘
- jquery 이벤트 처리
- 순열 재귀
- 후위표기
- 자바
- 자바입출력
- java lambda
- 자바 재귀 조합
- 조합 재귀
- 재귀함수
- java 내부 클래스
- 자바스크립트 이벤트중지
Archives
- Today
- Total
유블로그
[Java] swea 4008 숫자만들기 본문
[Java] swea 4008 숫자만들기
처음에.. operator 들을 모두 배열에 넣어 순열을 돌렸더니... 시간초과가 나서 42개 정도만 맞게 나왔다.
그래서 주변에서 조언을 듣고 바꿨다... 하하
operator들 개수들을 재귀 파라미터로 주고
하나씩 빼가면서 모든 경우 완탐하는 방식이다
package 삼성합격;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 모의SW_4008_숫자만들기 {
static int N;
static int[] operators = new int[4], numbers;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int testcase = 1; testcase <= T; testcase++) {
MAX = Integer.MIN_VALUE;
MIN = Integer.MAX_VALUE;
N = Integer.parseInt(br.readLine());
numbers = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < 4; i++) {
operators[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
numbers[i] = Integer.parseInt(st.nextToken());
} // input end
solve(1, numbers[0], operators[0], operators[1], operators[2], operators[3]);
solve(1, numbers[0], operators[0], operators[1], operators[2], operators[3]);
solve(1, numbers[0], operators[0], operators[1], operators[2], operators[3]);
solve(1, numbers[0], operators[0], operators[1], operators[2], operators[3]);
System.out.println("#" + testcase + " " + (MAX-MIN));
} //tc
} //main
static int MAX, MIN;
private static void solve(int idx, int sum, int plus, int minus, int mul, int div) {
if(idx == N) {
if(MAX < sum)
MAX = sum;
if(MIN > sum)
MIN = sum;
return;
}
if(plus > 0) solve(idx+1, sum+numbers[idx], plus-1, minus, mul, div);
if(minus > 0) solve(idx+1, sum-numbers[idx], plus, minus-1, mul, div);
if(mul > 0) solve(idx+1, sum*numbers[idx], plus, minus, mul-1, div);
if(div > 0) solve(idx+1, sum/numbers[idx], plus, minus, mul, div-1);
} //solve
}
'알고리즘' 카테고리의 다른 글
[Java] swea 4013 특이한 자석 (0) | 2021.04.17 |
---|---|
[Java] swea 4012 요리사 (0) | 2021.04.17 |
[Java] BOJ 20058 마법사 상어와 파이어 스톰 (0) | 2021.04.16 |
SW expert 5650 핀볼게임 Java (0) | 2021.04.14 |
[프로그래머스] 방문길이 Java (0) | 2021.03.09 |