본문 바로가기
IT/BOJ

백준(BOJ) 3190 뱀 **

by 빨강자몽 2018. 6. 1.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <math.h>
#include <queue>
#include <set>
#include <list>
#include <utility>
#include <functional>
#define MAX 105
#define INF 987654321
#define MOD 1000000
typedef long long ll;
#pragma warning(disable:4996)
using namespace std;


int n,a,b,c,map[MAX][MAX],direct[MAX*MAX]={0,};
int dy[4]={-1,0,1,0},dx[4]={0,1,0,-1};
int go[4][3]={{0,3,1},{1,0,2},{2,1,3},{3,2,0}};
bool visit[MAX][MAX];
char ch;
deque<pair<int,int>> dq;

int main()
{
    scanf("%d",&n);
    
    fill_n(&map[0][0],MAX*MAX,-1);
    for(int i=1;i<=n;i++)
        for(int k=1;k<=n;k++)
            map[i][k]=0;
    
    scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        scanf("%d%d",&b,&c);
        map[b][c]=1;
    }
    scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        scanf(" %d %c",&b,&ch);
        direct[b]=ch=='L'?1:2;
    }
    dq.push_front(make_pair(1, 1));
    //q.push(make_pair(1, 1));
    visit[1][1]=true;
    int times=1,cur_d=1;
    while(1)
    {
        pair<int,int> p=dq.front();
        int ty=p.first+dy[cur_d],tx=p.second+dx[cur_d];
        cur_d=go[cur_d][direct[times]];
     
        if(visit[ty][tx]==true||map[ty][tx]==-1)
            break;
        if(map[ty][tx]==0)
        {
            visit[ty][tx]=true;
            dq.push_front(make_pair(ty, tx));
            //q.push(make_pair(ty, tx));
            p=dq.back();
            visit[p.first][p.second]=false;
            dq.pop_back();
        }
        else if(map[ty][tx]==1)
        {
            map[ty][tx]=0;
            visit[ty][tx]=true;
            dq.push_front(make_pair(ty, tx));
        }
        times++;
    }
    printf("%d",times);
    
    return 0;
}


'IT > BOJ' 카테고리의 다른 글

백준(BOJ) 2098 외판원 순회 **  (0) 2018.06.01
백준(BOJ) 2987 사과나무 **  (0) 2018.06.01
백준(BOJ) 3048 개미 *  (0) 2018.06.01
백준(BOJ) 2188 축사 배정 ***  (0) 2018.06.01
백준(BOJ) 6086 최대 유량 ***  (0) 2018.06.01