본문 바로가기

알고리즘/SWEA

6959

static char numbers[1024];
static char winner[] = { 'A', 'B' };
 
static char solution(void)
{
    int digit, turn = 1;
 
    scanf("%s\n", numbers);
    digit = numbers[0] - '0';
    for (int i = 1; numbers[i] != 0; i++)
    {
        digit += (numbers[i] - '0');
        if (digit >= 10) //두 자리
        {
            int q = digit / 10, r = digit % 10;
            digit = q + r;
            turn = 1 - turn;
        }
        turn = 1 - turn;
    }
 
    return winner[turn];
}

1234라는 숫자가 있고, 여기서 인접한 두 수의 합을 더해 나가다 보면 언젠가는 한자리가 된다.

그런데 여기서 한가지 재밌는 점은 더하는 방법을 어떻게 하더라도 그 결과는 모두 동일하게 된다는 것이다.

 

(12)(34) -> 37 -> 10 -> 1

1(23)4 -> 154 -> (15)4, 1(54) -> 10 -> 1

 

여기서는 좀 짧은 길이로 해봤지만 길이가 길어도 이러한 점은 같다.

 

그래서 이러한 점에 착안해서 코드를 작성하면 되는데, 

한가지 고려할 만 한 점은 99 -> 18이 되어서 다시 두자리가 된다는 것이다.

이 경우에는 다시 문자열에 넣어서 하면 더 복잡해지기 때문에, 이 수를 다시 처리한다고 생각하면 된다.

그래서 누가이기는지를 나타내는 turn이라는 변수가 경우에 따라 두번 변하는 것이다.

'알고리즘 > SWEA' 카테고리의 다른 글

7812  (0) 2021.11.03
1952  (0) 2021.11.03
4088  (0) 2021.11.03
5644  (0) 2021.11.03
8275  (0) 2021.11.03