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
- jquery 필터선택자
- 자바
- inner class
- 자바스크립트 이벤트중지
- jquery 이벤트 처리
- 서로소
- 자바 순열 코드
- jquery dom 계층 선택자
- 순열코드
- 조합 재귀
- 재귀함수
- 상속
- Interface
- java Collections.sort()
- parseInt()
- 재귀
- jquery 속성선택자
- 자바 재귀 조합
- 자바입출력
- str to char array
- 알고리즘
- char to str
- java lambda
- 순열 재귀
- java 내부 클래스
- 알고리즘 그래프
- 자바스크립트 이벤트처리
- Java
- 후위표기
- 자바 조합 재귀
Archives
- Today
- Total
유블로그
[프로그래머스] 수식 최대화 본문
[프로그래머스] level2 수식 최대화
소요시간 : 1시간 26분
아 너무 힘들군
처음에 그냥 string 으로 하다가 마이너스 같은 것들 때문인지 제시된 테케만 맞고
제출하면 반 정도는 틀렸다.
에러를 고치느라 한 시간이 훌쩍 넘어서
그냥 약간 힌트를 보고
결국엔 그냥 코드를 다시 짰는데
List 로 숫자와 연산자를 나눠서 계산했다.
찾은 연산자 인덱스가 1이라면
숫자 List 인덱스 1과 2의 값을 연산하면 되고,
연산자 List에서는 인덱스 1을 remove한다.
마지막에 남은 numList.get(0) 으로 MAX를 갱신한다.
값은 항상 Long 으로!
이 방법으로 하니 거의 10~20분만에 할 수 있었다. 휴........................................................................................
import java.util.ArrayList;
import java.util.List;
class Solution {
int[] numbers = new int[3];
boolean[] selected = new boolean[3];
char[] operators = {'*', '+', '-'};
public long solution(String expression) {
permu(0, expression);
return answer;
}
long answer = 0;
void permu(int cnt, String expression) {
if(cnt == 3) {
List<Long> numList = new ArrayList<>();
List<Character> operList = new ArrayList<>();
for (int i = 0; i < expression.length(); i++) {
if(expression.charAt(i) == '+' || expression.charAt(i) == '-' || expression.charAt(i) == '*') operList.add(expression.charAt(i));
else {
int j = i;
while(true) {
if(j == expression.length()) break;
if(expression.charAt(j) == '+' || expression.charAt(j) == '-' || expression.charAt(j) == '*') break;
j++;
}
numList.add(Long.parseLong(expression.substring(i, j)));
i = j-1;
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < operList.size(); j++) {
if(operList.get(j) == operators[numbers[i]]) {
Long tot = (long) 0;
switch(operators[numbers[i]]) {
case '*':
tot = numList.get(j) * numList.get(j+1);
break;
case '+':
tot = numList.get(j) + numList.get(j+1);
break;
case '-':
tot = numList.get(j) - numList.get(j+1);
break;
}
numList.remove(j+1);
numList.set(j, tot);
operList.remove(j);
j = -1;
}
}
}
if(answer < Math.abs(numList.get(0))) answer = Math.abs(numList.get(0));
return;
}
for (int i = 0; i < 3; i++) {
if(selected[i]) continue;
selected[i] = true;
numbers[cnt] = i;
permu(cnt+1, expression);
selected[i] = false;
}
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] N개의 최소공배수 (0) | 2021.01.23 |
---|---|
[프로그래머스] JadenCase문자열만들기 (0) | 2021.01.23 |
[프로그래머스] 행렬의 곱셈 (0) | 2021.01.21 |
[프로그래머스] 최솟값만들기 (0) | 2021.01.20 |
[프로그래머스] 이진 변환 반복하기 (0) | 2021.01.20 |