본문 바로가기

알고리즘/SWEA

8556

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이상인 경우는 분자, 분모가 더 이상 서로 나누어 지지않으므로 분모까지 형식에 맞게 출력해주는 것이다.

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

5653  (0) 2021.11.08
8557  (0) 2021.11.08
2382  (0) 2021.11.08
8501  (0) 2021.11.08
2383  (0) 2021.11.04