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
- 조합 재귀
- java lambda
- 재귀
- 순열코드
- 알고리즘 그래프
- 자바스크립트 이벤트중지
- Interface
- 자바 조합 재귀
- 순열 재귀
- 알고리즘
- jquery 속성선택자
- inner class
- 후위표기
- java Collections.sort()
- jquery 필터선택자
- parseInt()
- 상속
- 서로소
- jquery dom 계층 선택자
- 자바
- char to str
- str to char array
- jquery 이벤트 처리
- 자바입출력
- 자바스크립트 이벤트처리
- 자바 순열 코드
- Java
- 재귀함수
- java 내부 클래스
- 자바 재귀 조합
Archives
- Today
- Total
유블로그
[Java] swea 4008 숫자만들기 본문
[Java] swea 4008 숫자만들기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
처음에.. 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 |