알고리즘 문제(SOL)

[백준/23841/파이썬] 데칼코마니

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

 

23841번: 데칼코마니

첫 줄에 그림의 세로 길이 정수 N과 가로 길이 정수 M이 주어진다. (1 ≤ N, M ≤ 50, M은 짝수) N개 줄에 M개씩 그림에 대한 정보가 주어진다. 물감은 26가지가 있고, 각각 알파벳 대문자 하나로 나타

www.acmicpc.net

Problem

  • 위에 보이는 것처럼 그림을 좌우 방향으로 반으로 포개어 접으면, 맞닿는 면에 물감이 번지면서 데칼코마니가 완성된다.
  • 접은 그림은 원래대로 되돌릴 수 없기 때문에 희권이는 결과를 미리 알고 싶어 한다.
  • 희권이에게 그림을 데칼코마니 한 결과를 알려주자.

조건

  • 첫 줄에 그림의 세로 길이 정수 N과 가로 길이 정수 M이 주어진다. (1 ≤ N, M ≤ 50, M은 짝수)
  • N개 줄에 M개씩 그림에 대한 정보가 주어진다.
  • 물감은 26가지가 있고, 각각 알파벳 대문자 하나로 나타낸다.
  • 그림에서 색칠한 곳은 물감에 해당하는 알파벳으로 빈 곳은 '.'으로 표현한다. 그림의 가로 길이는 짝수이고, 그림을 접었을 때 두 물감이 겹치는 경우는 없다.

SOL

좌표들 간의 상관관계를 잘 따지면, 쉽게 해결할 수 있는 문제다.

직관적으로 딱 ! 보임

# 데칼코마니
import sys
input = sys.stdin.readline
N,M =map(int,input().split())

board=[list(input().rstrip()) for _ in range(N)]

for i in range(N):
    for j in range(M):
        if board[i][j] !=".":
            board[i][M-j-1]=board[i][j]

for p in board:
    print("".join(p))