Today I Learned

최지웅·2024년 3월 15일
0

Today I Learned

목록 보기
116/258

오늘 할일
1. 창엔 2일차
2. LeetCode

오늘 한일
2. LeetCode

    1. Data2 Senate의 마지막 테스트 케이스를 하나 남겨두고 디버깅을 해보려고 한다. 마지막 테스트케이스를 한번 분석해보자.
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로 확인했는데 이를 원소 하나를 삭제하고 해당 원소를 기준으로 확인하는 등 중간에 확인하는 방법을 적용해야할 듯 해보인다.

profile
이제 3학년..

0개의 댓글