728x90
반응형
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXSVc1TqEAYDFAQT
#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
반응형
'컴퓨터 > 알고리즘' 카테고리의 다른 글
[SWEA] 11387. 몬스터 사냥 (float대신 double을 써야하는 이유) (0) | 2021.02.15 |
---|---|
[BOJ] 2839. 설탕배달 (0) | 2021.02.10 |
[SWEA] 10965. 제곱수 만들기 (에라토스테네스의 체) 빠른속도 (0) | 2021.02.06 |
[SWEA] 11285. 다트 게임 (0) | 2021.02.05 |
[SWEA] 11315. 오목 판정 (0) | 2021.02.04 |