본문 바로가기

알고리즘/대회

[대회][BOJ][INU 코드페스티벌 2021] A번 23841 : 데칼코마니

문제를 정리해보자.

 

N X M인 격자무늬의 사각형이 있다.

N은 세로의 길이, M은 가로의 길이이다.

그리고 M은 짝수이다.

 

이 격자무늬 사각형의 칸에는 물감이 묻은 곳이 있다.

이 사각형을 반으로 접었을 때, 맞닿는 칸은 물감이 번진다. 

 

번진 결과를 출력해야 한다.

 

 

풀이를 생각해보자.

 

M이 짝수인 점이 중요하다.

만약 M이 6이고, N은 4라고 하자.

 

 

가로의 index를 보면

0 5

1 4

2 3

이렇게 맞닿게 된다.

 

즉,

i (0 <= i <= (M // 2) - 1) 이라고 할 때,

i번째 칸은 (M - 1) - i번째 칸과 맞닿는다.

 

 

 

구현해보자.

 

 

n, m = map(int, input().split())  # 세로, 가로

# 세로
for _ in range(n):

    li = []

    # 가로
    for string in input():
        li.append(string)

    for i in range(m // 2):
        if li[i] == '.':
            li[i] = li[(m - 1) - i]

        else:
            li[(m - 1) - i] = li[i]

    for string in li:
        print(string, end="")
    print()

 

 

시간복잡도는 O(NM)이다.