static char str[1024];
static void solution(void)
{
char * ptr = str;
int a = 0, b = 1; // a / b
stack<char> s;
scanf("%s\n", str);
while (*ptr != 0)
{
s.push(*ptr);
if (*ptr == 'w')
ptr += 4;
else
ptr += 5;
}
if (s.top() == 'w')
a = 90;
else
a = 0;
s.pop();
for (int i = 1; s.size(); i++)
{
a *= 2;
b *= 2;
if (s.top() == 'w')
a += 90;
else
a -= 90;
s.pop();
}
while (a % 2 == 0 && b % 2 == 0)
{
a /= 2;
b /= 2;
}
if (b == 1)
printf("%d\n", a);
else
printf("%d/%d\n", a, b);
}
입력으로 받은 문자열의 끝부분부터 읽고 처리해야 한다.
그래서 스택을 이용하여 문자열 앞부분을 마지막에 처리하도록 하였다.
최초의 방향에 따라 초기값을 설정한다.
이후 스택이 빌 때 까지 연산할 값 중 분모에 맞춰서 먼저 값을 조정한다.
횟수가 진행될 수 록 각도는 절반씩 줄어들기 때문에 "2" 만 분자, 분모에 곱해주면 된다.
그 다음에는 분자, 분모를 기약분수 형태로 만들어 준다.
이후 분모가 1이면 분모는 생략할 수 있으므로, 분자만 출력하면 되는 것이고,
분모가 2이상인 경우는 분자, 분모가 더 이상 서로 나누어 지지않으므로 분모까지 형식에 맞게 출력해주는 것이다.