오늘 할일
1. LeetCode
2. 강의?
3. 창엔 업무
4. 카카오팀 영입 등 지원
5. 챙 선물
오늘 한일
1. LeetCode
class Solution {
private StringBuilder result;
private char deleted_mark='-';
private int delete_near_opponent(int index){
if(result.charAt(index)==deleted_mark){
return 1;
}
char current_team=result.charAt(index);
int size=result.length();
for(int i=index+1; i<size; i++){
if(result.charAt(i)!=deleted_mark && result.charAt(i)!=current_team){
result.setCharAt(i, deleted_mark);
return 0;
}
}
for(int i=index-1; i>=0; i--){
if(result.charAt(i)!=deleted_mark && result.charAt(i)!=current_team){
result.setCharAt(i, deleted_mark);
return 0;
}
}
return -1;
}
private boolean is_announce_the_victory(int index){
for(int i=0; i<index-1; i++){
if(result.charAt(i)==deleted_mark)
continue;
if(result.charAt(i)!=result.charAt(i+1)) {
return false;
}
}
for(int i=index+1; i<result.length()-2; i++){
if(result.charAt(i)==deleted_mark)
continue;
if(result.charAt(i)!=result.charAt(i+1)){
return false;
}
}
if(index>=result.length() ||
(result.charAt(index)==result.charAt(index+1))
&& (result.charAt(index)!=deleted_mark)){
return false;
}
return true;
}
public String predictPartyVictory(String senate) {
int size=senate.length();
result=new StringBuilder(senate);
while(true){
for(int i=0; i<size; i++){
int val=delete_near_opponent(i);
if(val==-1){
return result.charAt(i)=='R'?"Radiant":"Dire";
} else if(val==1 || val==0) {
continue;
} else if(is_announce_the_victory(i)) {
return result.charAt(0) == 'R' ? "Radiant" : "Dire";
}else{
System.out.println("ERROR");
}
}
}
}
}
이 문제는 잠시 보류하기로 하겠다. 다음 문제가 조금 빠르게 해결되었을 시 남은 하루의 시간동안 계속 고려해보겠다. 문제를 제대로 이해했다면 통과해야할 코드인데 문제를 잘 못 이해하고 있는 부분이 있는 듯 해서 당장 접근할 수 있는 방법이 남아있지 않다.
Discussion을 확인해보니, Queue를 이용하는 문제이기에 마지막에 있는 Senate가 첫번째 Senate에 영향을 끼칠 수 있는 것으로 보인다. 즉, 라운드 마다 진행되는 게임이기에 현재 나의 경우 마지막 Senate는 Announce the victory외엔 ban을 하지 못하게 구현했는데, Queue를 이용하는 것으로 보아 첫번째 원소에 영향을 끼칠 수 있게 설계하면 될 듯 하다. 이는 문제 설계의 오류로 보이며 오늘은 시간이 많지 않기에 코드 전체의 수정을 내일 다시 시도해보겠다.