Rochambo Topcoder



public class Rochambo {
    public int wins(String opponent) {
        int w=0;

        if(opponent.charAt(0) == 'S') w++;
        if(opponent.charAt(1) == 'S') w++;

        for (int i=2; i < opponent.length(); i++) {
            char c;
            if(opponent.charAt(i-2) != opponent.charAt(i-1)) c = (char)('R' + 'P' + 'S' - opponent.charAt(i-1) - opponent.charAt(i-2));
            else c = opponent.charAt(i-1);

            if(c == opponent.charAt(i)) w++;
        }

        return w;
    }
}


Explanation

※ 손 모양을 이기는 손 모양이 아닌 opponent와 같은 것으로 c에 대입하고 마지막에 비교해서 같으면 w를 증가시킬 수 있다. 이기는 손 모양을 대입하는 것보다 훨씬 효율적으로 코드를 짤 수 있다.

if문:
첫 번째와 두 번째 모두 주먹(R)을 내므로 opponent의 첫 번째, 두 번째 값이 가위(S)면 w를 증가시킨다.

for문:
  1. 전판 손 모양과 전전판 손 모양이 다를 경우
    그 다음 나올 손 모양은 앞의 두 개의 것과는 달라야 한다. "'R' + 'P' + 'S' - 전판 손 모양 - 전전판 손 모양"을 적용하면 당연히 남은 한 개의 손모양이 나오게 된다.

  2. 같을 경우
    opponent의 손모양을 그대로 대입한다.

opponent의 현재값과 c가 일치하면 w를 증가시킨다.


References



1 2 3 4 5 6 7 8 9 10 다음