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;
}
반응형
'알고리즘문제' 카테고리의 다른 글
[백준]boj 1009 분산처리 (distributed processing) (0) | 2018.08.07 |
---|---|
[백준] boj 1008 A/B (division) (0) | 2018.08.07 |
[백준] boj 1003 피보나치함수(Fibonacci function) (0) | 2018.08.07 |
코드그라운드 50번 문제 스타벅스 (0) | 2017.09.28 |
코드그라운드 49번 문제 안녕 (0) | 2017.09.26 |
댓글