본문 바로가기
컴퓨터/알고리즘

[SWEA] 10761. 신뢰(로봇 버튼누르기)

by IT황구 2021. 2. 9.
728x90
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXSVc1TqEAYDFAQT

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
typedef long long ll;
using namespace std;
//가장  바깥에 꽂힌경우 0점인것만 처리. 
int main(void)
{

	int tc,num;
	char alpha;
	int bt;
	int b;
	int o;
	int global;
	int og,bg;
	
	scanf("%d",&tc);
	for(int i = 0; i < tc; i++)
	{
		scanf("%d",&num);
		b = 1; o = 1;
		global = 0;
		bg = 0;
		og = 0;
		for(int x = 0; x < num; x++)
		{
			cin>> alpha >> bt;
			if(alpha == 'B'){
				for(int k = 0; k < bg; k++)
				{
					if( b < bt){
						b++;
					}else if( b > bt){
						b--;			
					}else{						
						break;
					}
				}
			
				while(1){
					if( b < bt){
						b++;
						og++;
						global++;
					}else if( b > bt){
						b--;
						og++;
						global++;
					}else{
						og++;
						global++; 
						bg = 0;
						break;
					}
				}
			
			}else{
				for(int k = 0; k < og; k++)
				{
					if( o < bt){
						o++;
					}else if( o > bt){
						o--;	
					}else{
						break;
					}
				}
		
				while(1){
					if( o < bt){
						o++;
						bg++;
						global++;
					}else if( o > bt){
						o--;
						bg++;
						global++;
					}else{
						global++;
						bg++;
						og = 0;
						break;
					}
				}
			}
		}
		printf("#%d %d\n",i+1,global);
		
	}
	
	return 0;
}

풀이방법 : 설명할게 따로 없습니다..

O가 움직이고 클릭하는 동안에 B는 움직이는것만 가능하다. 라는 생각을 가지고 푸시면 됩니다.

4 B 2 O 1 O 2 B 4

이걸 예시로 들면

1. B가 2번 움직이고 (O는 클릭할수 없습니다. 클릭에 순서가 있어서)

2. O가 클릭 한번 하고.

3. O가 2로 움직이고 클릭을 합니다. 동시에 B는 2에서 4까지 움직여놓을 수 있습니다. (클릭은 순서가 있어서 못함)

4. 그다음 B가 4에 와있을테니 클릭만 하면 됩니다.

따라서 풀이는 B가 움직일동안 클릭, move 횟수를 합해서 변수에 저장해둡니다.

그다음 O가 나왔을때 B에서 했던 move,클릭 횟수만큼 이동할 수 있게 합니다.

여길 보시면 만약 O가 움직이는경우 B에다가 O가 얼마나 움직였는지 기록해둡니다.

이후에 B로 가면 이전에 쌓아둔 만큼 이동할 수 있습니다.

이해 안가시면 댓글로 남겨도 됩니다.

이만..

===END===

 

728x90
반응형