오늘 할일
1. 창엔 2일차
2. LeetCode
오늘 한일
2. LeetCode
1. 원본
"RDRDRDDRDRDRDRDRRDRDRDRDRDRDDDDRRDRDRDRDRDRDRDRRRRRDRDRDRDRDDDDDRDRDRDRDRDRDRDRRDRDRDRDRDRDRRDRDRDRDRDRDRDRDRRDRDRDRDRDRRD"
2. 1차 루프 결과
"R-R-R-D-D-D-D-D-R-R-R-R-R-R-DDD--D-D-D-D-D-D-D--RRR-R-R-R-R---DD-D-D-D-D-D-D-D--D-D-D-D-----R-R-R-R-R-R-R-R-RR-R-R-R-R-RR-"
3. 2차 루프 결과
"R-R-R-------D-D-----R-R-R-R--------D-D-D-D-D-D------------R----D-D-D-D-D-D-D-D-------------------------------------R-R-RR-"
4. 3차 루프 결과
"R-R-R----------------------------------------D-----------------D-D-D-D-D-D-D-D--------------------------------------------"
5. 4차에 Dire을 도출.
살펴봐도 큰 의미가 없는 것이, 이미 내가 이해한 알고리즘에 따라 작동하는 코드이기에 결과 분석은 무의미하다고 생각했다. 문제를 한글자한글자 다시금 해석하고 필요 시 힌트를 열람하여 놓친 부분이 있는지 확인해보는 것이 좋아보인다.
R팀과 D팀으로 나뉘는데, 모든 참여자는 round-based절차에 따라 투표를 통해 게임을 변화시킬 수 있다. 모든 라운드마다 모든 참여자는 다른 참여자의 투표권을 상실시키거나, 같은 파티에 있는 모든 사람들 중 아직 투표권이 있는 사람을 찾아내었다면 승리를 공표할 수 있다. (아마 이 조건이 힌트일 것). round-based 절차는 첫번째 참여자부터 순서에 따라 마지막 참여자까지 진행된다. 투표의 종료까지 절차는 진행한다(이것도 잘 보자).
해석을 제대로 해보자. 참여자가 자신이 속한 팀에서 투표권이 있는 사람들을 모두 찾아내었다면 승리이다. 아마 이 부분을 어떻게 해석하느냐에 따라 다를 것으로 보인다. 다음으로 round-based는 공정하다는 의미보다는 라운드마다 진행한다는 뜻같다.
위 요인을 R과 D가 이분으로 나뉘면 앞쪽 팀이 승리한다고 해석하고 예외처리를 해보겠다.
private boolean is_announce_the_victory(){
int change=0;
char prev_char=result.charAt(0);
for(char c : result.toString().toCharArray()){
if(c=='-')
continue;
if(prev_char!=c){
change++;
prev_char=c;
}
if(change>1){
return false;
}
}
return true;
}
해당 조건을 확인할 수 있는 코드를 작성해보았는데, 마지막 테스트 케이스는 통과했지만 이전의 테스트 케이스에서 Fail이 도출되었다.
문제를 접근하는 방식은 맞았다고 보이나, 현재 하나의 루프가 돈 다음에 is_announce_the_victory로 확인했는데 이를 원소 하나를 삭제하고 해당 원소를 기준으로 확인하는 등 중간에 확인하는 방법을 적용해야할 듯 해보인다.