class Solution {
int[] arr;
int[] lion = new int[11];
int[] record = new int[11];
int gap = Integer.MIN_VALUE;
int N;
boolean hasWin;
int isLionWin(){
int enemyScore = 0;
int lionScore = 0;
for(int i = 0; i < 11; i++){
if(arr[i] == 0 && lion[i] == 0) continue;
else if(arr[i] >= lion[i]){
enemyScore += 10-i;
} else lionScore += (10-i);
}
return lionScore - enemyScore;
}
void dfs(int pos, int depth){
if(pos > 10) return;
if(depth == N){
int t = isLionWin();
if(t > 0){
hasWin = true;
if(t > gap){
gap = t;
for(int j = 0; j < 11; j++){
record[j] = lion[j];
}
}
else if(t == gap){
for(int i = 10; i >= 0; i--){
if(record[i] < lion[i]){
for(int j = 0; j < 11; j++){
record[j] = lion[j];
}
break;
} else if(record[i] > lion[i]) break;
}
}
}
return;
}
if(lion[pos] > arr[pos]){
dfs(pos+1, depth);
}
else{
lion[pos] += 1;
dfs(pos, depth+1);
lion[pos] -= 1;
dfs(pos+1, depth);
}
}
public int[] solution(int n, int[] info) {
int[] answer = {-1};
arr = info;
N = n;
dfs(0, 0);
answer = hasWin ? record : answer;
return answer;
}
}
95분..
무작정 코딩하다가 덕지덕지 코드가 더러워졌다.
50분정도 소요됐을 때 87.5점이 나왔었는데, 실제 코테였으면 다음 문제로 넘어가지 않았을까 싶다..
그 후로 멘탈이 나가서 45분동안 지옥의 디버깅으로 결국 잡아냄..
최대값이 갱신될 때 기존의 최대값이 아닌 배열과 비교해서
최대값인 배열이 반영이 안되는 거였다
매번 느끼지만 처음에 설계가 정말 중요하지 싶다..
그리고 lion이 아니라 ryan이었다
'문제풀이 > 프로그래머스' 카테고리의 다른 글
신고 결과 받기 (0) | 2024.04.10 |
---|---|
괄호 변환 (0) | 2024.04.08 |
택배 배달과 수거하기 (0) | 2024.04.06 |
리코쳇 로봇 (1) | 2024.04.05 |
푸드 파이트 대회 Java (0) | 2024.02.28 |