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문:
- 전판 손 모양과 전전판 손 모양이 다를 경우그 다음 나올 손 모양은 앞의 두 개의 것과는 달라야 한다. "'R' + 'P' + 'S' - 전판 손 모양 - 전전판 손 모양"을 적용하면 당연히 남은 한 개의 손모양이 나오게 된다.
- 같을 경우opponent의 손모양을 그대로 대입한다.
opponent의 현재값과 c가 일치하면 w를 증가시킨다.
References
최근 덧글