알고리즘

[백준, 파이썬, 3023번] 마술사 이민혁

hminor 2024. 2. 15. 10:11

풀이

  • 해당 문제에서 중요했던 점으로 생각하는 건 
  • 깊은 복사를 인지하는지 물어보는 문제 같았다.
  • 카드 접어서 추가하는 건 check로 받아온 값을 mtx에 넣어주며
  • 코드와 같이 슬라이싱을 활용해서 li를 만들어주고
  • 얕은 복사를 하지 않기 위해 반복문으로 하나씩 값을 넣어주고
  • 이후 에러 위치에는 기존 값에 따라 서로 다른 값으로 넣어주면서 해결

 

import sys
input = sys.stdin.readline

r,c = map(int,input().split())
mtx = [[""]*(2*c) for _ in range(r*2)]
check = [list(input().rstrip('\n')) for _ in range(r)]
err = list(map(int,input().split()))

cnt = r-1
for i in range(2*r):
    if r > i:
        li = check[i] + check[i][::-1]
        for j in range(2*c): mtx[i][j] = li[j]
    else:
        li = mtx[cnt]
        for j in range(2*c): mtx[i][j] = li[j]
        cnt -= 1
mtx[err[0]-1][err[1]-1] = "#" if mtx[err[0]-1][err[1]-1] == "." else "."

for i in range(2*r): print("".join(mtx[i]))