백준 3190 - 뱀
구현문제를 많이 안풀어 봐서 아직 감이 잘 안잡힌다
하나 배운점은 문제조건을 꼼꼼히 잘 생각해봐야 한다는 것과
특수한 상황에 대한 판단을 계속해서 해줘야 할 것 같다.
(이문제에서 사과를 먹으면 사과가 없어진다는 점을 놓쳐서 시간이 좀 소모됐다...)
#include<iostream>
#include<queue>
#include<deque>
#include<vector>
using namespace std;
int main(){
// 벽 또는 자기 자신과 부딪히면 게임 끝
int ar[100][100];
int N;
cin>>N;
int K;
cin>>K;
for(int i=0;i<100;i++){
fill_n(ar[i],100,0);
}
int a,b;
for(int i=0;i<K;i++){
cin>>a>>b;
ar[a-1][b-1]=-1;
}
queue<pair<int,int>> q;
cin>>a;
int e;char d;
// 왼쪽0 오른쪽 1
for(int i=0;i<a;i++){
cin>>e>>d;
if(d=='D'){
q.push({e,1});
}else{
q.push({e,0});
}
}
int time=0;
int X=0;int Y=0;
pair<int,int> dd={1,0};
deque<pair<int,int>> track;
track.push_back({X,Y});
while(true){
int n=q.front().first;
int nx=X+dd.first;
int ny=Y+dd.second;
for(int i=0;i<track.size();i++){
if(track[i].first==nx&&track[i].second==ny){
cout<<time+1<<endl;
return 0;
break;
}
}
if(nx<0||nx>=N||ny<0||ny>=N){
break;
}
if(ar[ny][nx]==-1){
track.push_front({nx,ny});
ar[ny][nx]=0;
X=nx;Y=ny;
}else{
track.push_front({nx,ny});
track.pop_back();
X=nx;Y=ny;
}
time+=1;
if(time==n){
int idx;
if(!q.empty()){
idx=q.front().second;
}
q.pop();
if(dd.first==1&&dd.second==0){
if(idx==0){
dd={0,-1};
}else{
dd={0,1};
}
}else if(dd.first==0&&dd.second==1){
if(idx==0){
dd={1,0};
}else{
dd={-1,0};
}
}else if(dd.first==-1&&dd.second==0){
if(idx==0){
dd={0,1};
}else{
dd={0,-1};
}
}else if(dd.first==0&&dd.second==-1){
if(idx==0){
dd={-1,0};
}else{
dd={1,0};
}
}
}
}
cout<<time+1;
}
Author And Source
이 문제에 관하여(백준 3190 - 뱀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lsvk9921/백준-3190-뱀저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)