본문 바로가기
알고리즘/백준

백준 14677 병약한 윤호 C++

by ash9river 2025. 8. 8.

 

요약

그냥 bfs

시간초과시 방문처리만 잘해주면 된다.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
#include <queue>
#include <set>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
char pChange(char p){
  switch(p){
    case 'B': return 'L';
    case 'L': return 'D';
    case 'D': return 'B';
  }
  return 'B';
}
set<deque<char>> s;

int main(){
  int n;
  cin>>n;
  deque<char> v(n*3);
  for(int i=0;i<n*3;++i){
    cin>>v[i];
  }
  int ans=0;
  int left=0,right=n-1;
  char p='B';
  queue<pair<pair<int,char>,deque<char>>> q;
  q.push({{0,'B'},v});
  while(!q.empty()){
    int maxAns=q.front().first.first;
    char currentM=q.front().first.second;
    deque<char> ar=q.front().second;
    q.pop();
    ans=max(maxAns,ans);
    if(ar.size()==0) continue;
    if(ar[0]==currentM){
      
      deque<char> newAr(ar.size());
      for(int i=0;i<ar.size();++i){
        newAr[i]=ar[i];
      }
      newAr.pop_front();
      if(s.find(newAr)==s.end()){
        q.push({{maxAns+1,pChange(currentM)} ,newAr});
        s.insert(newAr);
      }
    }
    if(ar[ar.size()-1]==currentM){
      deque<char> newAr(ar.size());
      for(int i=0;i<ar.size();++i){
        newAr[i]=ar[i];
      }
      newAr.pop_back();
            if(s.find(newAr)==s.end()){
        q.push({{maxAns+1,pChange(currentM)} ,newAr});
        s.insert(newAr);
      }
    }
  }
  cout<<ans;
}

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

백준 16954 움직이는 미로 탈출 C++  (0) 2025.08.08
백준 23559 밥 C++  (2) 2025.08.08
백준 32069 가로등 C++  (2) 2025.07.20
백준 2073 수도배관공사 C++  (1) 2025.03.02
백준 13459 구슬 탈출 C++  (0) 2025.02.24