본문 바로가기

Algorithm

1210. [S/W 문제해결 기본] 2일차 - Ladder1

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

그냥 while 여러개 쓸 것 없이 방향 바꿔가면서 반복하면 끝.

쉬운 문제인데 데이터가 너무 커서 확인하는데 애썼다.

 

#include<iostream>
#include<string.h>
using namespace std;
 
int arr[100][100];
 
bool ladder(int y, int x)
{
     
    int dir = 0; //0은 아래, 1->왼 2->오른 
    while (1)
    {
        if (y >= 99)
        {
            if (arr[y][x] == 2)
            {
                return true;
            }
            return false;
        }
 
        if (dir == 0)
        {
            y++;
 
            if (x == 0)
            {
                if (arr[y][x + 1])
                {
                    dir = 2;
                }
            }
            else if (x > 0 && x < 99)
            {
                if (arr[y][x + 1])
                {
                    dir = 2;
                }
                else if (arr[y][x - 1])
                {
                    dir = 1;
                }
 
            }
            else if (x == 99)
            {
                if (arr[y][x - 1])
                {
                    dir = 1;
                }
 
            }
 
 
        }
        else if (dir == 1)
        {
            x--;
 
            if (arr[y + 1][x])
            {
                dir = 0;
            }
 
        }
        else
        {
            x++;
             
            if (arr[y + 1][x])
            {
                dir = 0;
            }
 
        }
         
 
 
    }
 
 
}
 
 
 
int main(int argc, char** argv)
{
     
    for (int test_case = 1; test_case <= 10; test_case++)
    {
        int tc;
        cin >> tc;
 
        for (int i = 0; i < 100; i++)
        {
            for (int j = 0; j < 100; j++)
            {
                cin >> arr[i][j];
            }
        }
 
        int ans = 0;
 
 
        for (int j = 0; j < 100; j++)
        {
            if (arr[0][j])
            {
                if (ladder(0, j))
                {
                    ans = j;
                }
            }
        }
 
        cout << "#" << tc << " " << ans << endl;
    }
 
 
    return 0;
}
반응형