알고리즘문제

코드그라운드 12번 문제 방속의 거울

Beginner:) 2017. 9. 25.
320x100

1. 빛의 방향을 체크한다.

2. 거울의 모양을 체크한다.

3. 거울이 반사를 체크했는지, 반사가 되었다면 어떻게 표시할것인지?


1,2 번의 경우는 문제를 읽으면 이해하실테고

3번의 경우는 똑같은 크기의 배열을 선언할 수도 있지만 저같은 경우에는 그냥 4를 더했습니다.




#include <iostream>

using namespace std;
char arr[1000][1000];

int Answer;
char arrow='d'; // 좌 a 우 d 상 w 하 s
int main(int argc, char** argv)
{
int T, test_case;

cin >> T;
for(test_case = 0; test_case < T; test_case++)
{
arrow='d';
Answer = 0;
int N;
scanf("%d",&N);
for(int i=0;i<N;i++)scanf("%s",arr[i]);
int x=0,y=0;
while(1)
{
if(arr[y][x]=='0')
{
switch(arrow)
{
case 'a':
x--;break;
case 'd':
x++;break;
case 'w':
y--;break;
case 's':
y++;break;
}
}
else if(arr[y][x]=='1' || arr[y][x]=='5') // /
{
if(arr[y][x]=='1') {Answer++;arr[y][x]='5';}
switch(arrow)
{
case 'a':
arrow='s';y++;break;
case 'd':
arrow='w';y--;break;
case 'w':
arrow='d';x++;break;
case 's':
arrow='a';x--;break;
}
}
else if(arr[y][x]=='2' || arr[y][x]=='6') // 역슬
{
if(arr[y][x]=='2') {Answer++; arr[y][x]='6';}
switch(arrow)
{
case 'a':
arrow='w';y--;break;
case 'd':
arrow='s';y++;break;
case 'w':
arrow='a';x--;break;
case 's':
arrow='d';x++;break;
}
}

if(x>=N || x<0 || y>=N || y<0) break;
}
cout << "Case #" << test_case+1 << endl;
cout << Answer << endl;
}

return 0;
}


반응형

댓글