#include <iostream>
#include <string>
using namespace std;

int main() {

	ios::sync_with_stdio(0), cin.tie(0);
	long t; cin >> t;
	while (t--) 
	{
		long n; cin >> n;
		//방향 입력 받고
		string s; cin >> s;
		bool left(true), right(true);
		//가능방개수
		long cnt(0);

		//방개수만큼 반복
		for (long p = 0; p < n; p++) 
		{
			//양옆중에 양방향이있으면 가능
			if ((s[(n + p - 1) % n] == '-') || (s[p % n] == '-'))
			{
				++cnt; 
			}

			//한방향으로 모두가능한지 체크
			if (s[p] == '<') { right = false; }
			else if (s[p] == '>') { left = false; }
		}

		//어느 한방향으로 모두가능하면 방개수만큼 가능
		if (left || right) { cnt = n; }
		cout << cnt << endl;
	}
	return 0;
}

||사고 과정

내가 너무너무 어렵게 돌아간 문제다..(결국 다른 테스트케이스에서 틀림ㅋㅋㅋㅋㅋ)

단순 방을 한바퀴 돌면서 한쪽으로 모두 가능한지 확인하는게 핵심이였는데

 

나는 왼쪽으로 한번 돌고 안되면 오른쪽으로 한번 돌아보고 해서 너무 어렵게 갔었다.

하면서도 '아 이거 너무 돌아가는거 같은데?' 라는 생각이 들었는데 그때 바로 잡았어야했다...

 

암튼 요약하면 이번에는 원형배열을 한바퀴만 돌면서 가능한 문제를

왼쪽으로 돌아보고, 아니면 오른쪽으로 돌아보면서 풀었기에 망했다..

 

좀 더 로직을 줄일 수 있는지 충분히 생각하자.


||풀면서 느낀 것

  • 안풀리는 문제들은 항상 뭔가 마지막이 아쉽다?

여태 다 큰 그림은 맞았으면서도 무언가 하나를 돌아가서 틀리는 경우가 많은데

너무 빠르게 풀려하지말고 시간이 좀 남으면 정말 충분히 생각을 해봐야겠다.

+ Recent posts