미완_새로운게임2_17837

ddo_h·2020년 6월 3일
0

문제 출처 : 새로운게임_17837

파라미터 정리

NxN 전체 맵 크기 (4~12)
K 사용하는 말의 개수, 말은 중복할 수 있음 (4~10)
체스판 색상 : 흰색(0) 빨간색(1) 파란색(2)
이동 방향 : 위3 아래4 왼쪽2 오른쪽1
1턴 = 1~k번 말을 순서대로 이동시키는 것{
흰색 칸 : 그 칸으로 이동, 이미 있는 말 + 새로운 말
빨간 칸 : 그 칸으로 이동, 이미 있는 말 그대로 + 새로운 말 거꾸로
파란 칸 : 이동 방향을 반대로 하고 한 칸 이동 (이 때 파란칸으로 향할 경우 이동 x, 가만히 있음)
}
-체스판을 벗어나는 경우 파란색처럼 동작함
-중첩 말의 경우 해당 번호의 위에 있는 말만 함께 움직임
-말의 이동 방향에 있는 칸에 따라 말의 이동이 다름
-말이 4개 쌓이는 순간 게임 종료
원하는 것 = 게임이 종료되는 턴의 번호를 출력

간략한 과정

input_1 N, K 입력받기
input_2 Map[12][12] 체스판 색상 정보 입력받기
input_3 r,c,dir 말의 정보 입력받기 (행,렬은 1부터 시작)
cnt를 이용해서 횟수 세기
각 동작에 대한 함수 구현하기
동작 중 4개가 합쳐져 있는 경우 있으면 cnt 출력하기
cnt++
output 게임이 종료되는 턴의 번호를 출력
(값이 1000보다 크거나 종료되지 않을 경우 -1 출력)

코드

백업_0604_am 00:14
기빨려서 못하겠음,,,내일 다시 해야지

#include <iostream>
#include <vector>

using namespace std;

struct loc{
  int r,c,d;  
};
int N,K;
int Map[12][12];
loc peice[10];
vector<int> stacks[12][12];
int Dr[4] = {0,0,-1,1};
int Dc[4] = {1,-1,0,0};
//int ans;

int solve(int cnt){
    if(cnt > 1000) return -1;
    
    for(int i = 0; i < K; i++){
        loc curr = peice[i];
        int nr = curr.r, nc = curr.c, dir = curr.d;
        //위에 뭐가 달렸나 확인
        int idx = 0;
        for(int j = 0; j < stacks[nr][nc].size(); j++){
            int val = stacks.[nr][nc][j];
            if(val == i){
                idx = j+1;
                break;
            }
        }
        nr += Dr[dir];
        nc += Dc[dir];
        ////파란
        if(nr < 0 || nc < 0 || nr > N-1 || nc > N-1 ||Map[nr][nc] == 2){
             dir = Inverse(dir);
             nr = curr.r + Dr[dir];
             nc = curr.d + Dc[dir];
             if(Map[nr][nc] == 2 || nr < 0 || nc < 0 || nr > N-1 || nc > N-1)
                peice[i] = {curr.r,curr.c,dir};
             else
                peice[i] = {nr,nc,dir};
             
        }else if(Map[nr][nc]==0 || Map[nr][nc] == 1)//흰색//빨간
            peice[i] = {nr,nc,dir};
        //색깔에 따라서 위치 이동시키기부터
        if(Map)
    }
    return solve(cnt+1);
}

int main()
{
    cin >> N >> K;
    for(int i = 0; i < N; i++)
        for(int j = 0; j < N; j++)
            cin >> Map[i][j];
    for(int i = 0; i < K; i++){
        int r,c,dir;
        cin >> r >> c >> dir;
        peice[i] = {--r,--c,--dir};
        stacks[r][c].push_back(i);
    }
    cout << solve(1) <<endl;

    return 0;
}
profile
열심히!

관심 있을 만한 포스트

0개의 댓글