하루 1문제 챌린지/Silver1

백준 2615번 오목(C++)🚩

그린푸딩 2024. 3. 19. 16:14
728x90
반응형

푸는데 오래걸렸다..

실버인데 못풀어? 이러면서

 

오른쪽 방향으로 가로/세로/우상향/우하향 을 탐색하는데 주의할것은 지금 위치 전이나, 지금 위치에서 5번째 떨어진곳에 자신과 같으면 안된다. 

#include<vector>
#include <iostream>

using namespace std;

int arr[20][20]={0};

int dr[4]={0,1,1,-1};
int dc[4]={1,0,1,1};

bool cnt=0;
int main()
{
    for(int i=1;i<=19;i++){
        for(int j=1;j<=19;j++){
            cin>>arr[i][j]; 
        }
    }

   //연속으로 5개 

   //6개가 어딘가 있어도 되는가? 
   //6개인데 5개일수도 있잔아 ..

   //모든 배열에 대해 탐색
   for(int i=1;i<=19;i++){
        for(int j=1;j<=19;j++){
            if(arr[i][j]==0)continue;
            
            //방향
            for(int s=0;s<4;s++){
                //지금 위치 바로전, 5개 이후 같으면 x 
        
                
                //앞으로 4개 
                bool flag=true; 
                for(int k=1;k<=4;k++){
                    int nr=i+k*dr[s];
                    int nc=j+k*dc[s];
                    if(nr<1 || nc<1 || nr>19 || nc>19 || (arr[i][j]!=arr[nr][nc])){
                        flag=false; break; 
                    }
                }
                if(flag){
                    
                     int x1=i-dr[s]; int y1=j-dc[s]; 
                     if(x1>=1 && x1<=19 && y1>=1 && y1<=19 && arr[i][j]==arr[x1][y1])continue;
                     x1=i+5*dr[s]; y1=j+5*dc[s];
                     if(x1>=1 && x1<=19 && y1>=1 && y1<=19 && arr[i][j]==arr[x1][y1])continue;
                    
                    cout<<arr[i][j]<<'\n';
                    cout<<i<<' '<<j;
                    return 0;
                }
                
            }
    
        }
   }
   
 
  cout<<0;

    return 0;
}
728x90
반응형