판화 성공다국어
2 초 | 128 MB | 802 | 267 | 226 | 35.423% |
문제
W대학교 미술대학 조소과에서는 지루한 목판화 작업을 하는 학생들을 돕기 위해 판화 기계를 제작하였다.
기계는 로봇 팔이 쥔 조각도를 상하좌우 네 방향으로 움직일 수 있는 구조로서, 조각도 아래에 목판을 놓으면 그 위에 선들을 자동으로 그어주는 기능을 가지고 있다.
목판에는 N2개의 점들이 일정한 간격으로 N행 N열의 격자모양을 이루며 찍혀있다. 처음 로봇의 조각도를 올려놓는 위치는 항상 이 점들 중 맨 왼쪽 맨 위의 꼭짓점이다.
로봇 팔을 움직이는 명령의 순서가 주어졌을 때, 목판 위에 패인 조각도의 혼적을 출력하는 프로그램을 작성하시오.
판화 기계는 작동 도중 로봇 팔이 격자 바깥으로 나가도록 하는 움직임 명령을 만나면, 무시하고 그 다음 명령을 진행한다.
입력
첫째 줄에 목판의 크기 N (2 ≤ N ≤ 10)이 주어진다. 행 열의 점들이 찍혀 있다는 의미이다. 둘째 줄에 로봇팔의 움직임이 한 줄로 공백 없이 입력된다. 위쪽으로 이동은 'U', 아래쪽으로 이동은 'D', 왼쪽으로 이동은 'L', 오른쪽으로 이동은 'R'로 표시된다. 로봇팔의 움직임을 나타내는 이 문자열의 길이는 최대 250이다.
출력
로봇팔이 지나지 않은 점은 '.'으로, 로봇팔이 수직 방향으로만 지난 점은 '|'으로, 로봇팔이 수평 방향으로만 지난 점은 '-'으로, 수직과 수평 방향 모두로 지난 점은 '+'로 표기하도록 한다. 네 문자의 ASCII 코드는 각각 46, 124, 45, 43이다.
N = int(input())
order = input()
board = [["."]*N for _ in range(N)]
# print(board)
# print(order)
x = 0
y = 0
count = 2
key = True
for i in order :
if i == "D" or i == "U" :
if i == "U" and x == 0 :
continue
elif i == "D" and x == N-1:
continue
for j in range(count) :
if board[x][y]=="-":
board[x][y]="+"
elif board[x][y]==".":
board[x][y]="|"
if i =="D" :
if j == 0 :
x+=1
else:
if j == 0 :
x-=1
else :
if i == "L" and y == 0 :
continue
elif i == "R" and y == N-1:
continue
for j in range(count) :
if board[x][y]=="|":
board[x][y]="+"
elif board[x][y]==".":
board[x][y]="-"
if i =="R" :
if j == 0 :
y+=1
else:
if j == 0 :
y-=1
for i in range(N):
for j in range(N):
print(f'{board[i][j]}',end="")
print()
- 맞는거 같은데 계속 틀려서 많이 고민했습니다.. 계속 틀린 이유는 예를 들면 0,0의 위치에서 U을 하라 라는 명령을 들으면 그것을 무시하는 것을 제가 고려를 하지 않았습니다.
- 혹시나 저처럼 맞는거 같은데 안되시는 분들은
2 ULUULLLUULLUUULLLUUULLU
테스트 케이스를 넣어보시기 바랍니다.
정답은 아래입니다.
'알고리즘 공부 > 미분류' 카테고리의 다른 글
프로그래머스 3진법 뒤집기 (0) | 2022.01.11 |
---|---|
프로그래머스 멀쩡한 사각형 (0) | 2022.01.11 |
플로이드 워셜 알고리즘 (0) | 2021.08.20 |
백준 1752번 with Kotlin (0) | 2021.08.20 |
백준 1027번 with Kotlin (0) | 2021.08.20 |