fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 1730 (C++) 판화
최초 업로드: 2025-09-03 05:16:36
최근 수정 시간: 2025-09-03 05:16:52
게시자: rlatjwls3333
카테고리: 백준
조회수: 5
# [Silver IV] 판화 [문제 링크](https://www.acmicpc.net/problem/1730) ## 문제 설명 <p>W대학교 미술대학 조소과에서는 지루한 목판화 작업을 하는 학생들을 돕기 위해 판화 기계를 제작하였다.</p> <p>기계는 로봇 팔이 쥔 조각도를 상하좌우 네 방향으로 움직일 수 있는 구조로서, 조각도 아래에 목판을 놓으면 그 위에 선들을 자동으로 그어주는 기능을 가지고 있다.</p> <p>목판에는 N<sup>2</sup>개의 점들이 일정한 간격으로 N행 N열의 격자모양을 이루며 찍혀있다. 처음 로봇의 조각도를 올려놓는 위치는 항상 이 점들 중 맨 왼쪽 맨 위의 꼭짓점이다.</p> <p>로봇 팔을 움직이는 명령의 순서가 주어졌을 때, 목판 위에 패인 조각도의 혼적을 출력하는 프로그램을 작성하시오.</p> <p>판화 기계는 작동 도중 로봇 팔이 격자 바깥으로 나가도록 하는 움직임 명령을 만나면, 무시하고 그 다음 명령을 진행한다.</p> ## 입력 <p>첫째 줄에 목판의 크기 N (2 ≤ N ≤ 10)이 주어진다. 행 열의 점들이 찍혀 있다는 의미이다. 둘째 줄에 로봇팔의 움직임이 한 줄로 공백 없이 입력된다. 위쪽으로 이동은 'U', 아래쪽으로 이동은 'D', 왼쪽으로 이동은 'L', 오른쪽으로 이동은 'R'로 표시된다. 로봇팔의 움직임을 나타내는 이 문자열의 길이는 최대 250이다.</p> ## 출력 <p>로봇팔이 지나지 않은 점은 '.'으로, 로봇팔이 수직 방향으로만 지난 점은 '|'으로, 로봇팔이 수평 방향으로만 지난 점은 '-'으로, 수직과 수평 방향 모두로 지난 점은 '+'로 표기하도록 한다. 네 문자의 ASCII 코드는 각각 46, 124, 45, 43이다.</p> ## 풀이 $n * n$ 공간을 만들어 직접 시뮬레이션 해보면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; char board[10][10]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; string s; cin >> n >> s; fill(&board[0][0], &board[9][10], '.'); int x=0, y=0; for(char ch : s) { if(ch=='D' && x!=n-1 || ch=='U' && x!=0) { if(board[x][y]=='-') board[x][y]='+'; else if(board[x][y]=='.') board[x][y]='|'; if(ch=='D') x++; else x--; if(board[x][y]=='-') board[x][y]='+'; else if(board[x][y]=='.') board[x][y]='|'; } else if(ch=='R' && y!=n-1 || ch=='L' && y!=0) { if(board[x][y]=='|') board[x][y]='+'; else if(board[x][y]=='.') board[x][y]='-'; if(ch=='R') y++; else y--; if(board[x][y]=='|') board[x][y]='+'; else if(board[x][y]=='.') board[x][y]='-'; } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout << board[i][j]; cout << '\n'; } } ```