2016년 4월 5일 화요일

1730 - 판화

https://www.acmicpc.net/problem/1730

주어진 명령에 따라 팔을 움직이면서 자취를 그린다.

이미 그 곳에 자취가 그려져있는데 다른 방향이라면 + 를 그린다.


#include <bits/stdc++.h>
using namespace std;
 
int n;
char pan[101][101];
 
int DY[]={1,-1,0,0};
int DX[]={0,0,-1,1};
char cmd[]={'D','U','L','R'};
char pen[]={'|','|','-','-'};
 
bool same(char p, char q){
    if(!p || !q) return true;
    return p == q;
}
 
char trace(int y, int x, char want){
    if(pan[y][x] && !same(pan[y][x], want)) return '+';
    return want;
}
 
int main(){
    char s[1005]={};
    scanf("%d %s", &n, s);
     
    int i, j, y=0, x=0, len=strlen(s);
    char prev = 0;
    for(i=0; i<len; ++i){
        char cur = s[i];
        for(j=0; j<4; ++j){
            int dy=y+DY[j], dx=x+DX[j];
            if(dy<0 || dx<0 || dy>=n || dx>=n || cur!=cmd[j]) continue;
            pan[y][x] = trace(y, x, pen[j]);
            y = dy; x = dx;
            pan[y][x] = trace(y, x, pen[j]);
            break;
        }
    }
     
    for(i=0; i<n; ++i){
        for(j=0; j<n; ++j){
            putchar(pan[i][j] ? pan[i][j] : '.');
        }
        puts("");
    }
     
    return 0;
}
댓글 쓰기

게시글 목록