B. Almost Rectangle | Round #713 Div.3

14932 단어 2021.07.262021.07.26

https://codeforces.com/contest/1512/problem/B
시간 2초, 메모리 256MB

input :

  • t (1 ≤ t ≤ 400)
  • n (2 ≤ n ≤ 400)
  • '.' 혹은 '*'로 이루어진 길이 n짜리 문장

output :

  • For each test case, output n rows of n characters — a field with four asterisks marked corresponding to the statements. If there multiple correct answers, print any of them.

조건 :

  • You are to mark two more cells so that they are the corners of a rectangle with sides parallel to the coordinate axes.
    두개의 칸을 '*'로 바꿔서 직사각형을 구성할 수 있도록 하시오.

두 점을 이용해서 만들려 한다면
1. 동일한 행에 존재
2. 동일한 열에 존재
3. 위의 두 경우가 아닌 경우

이렇게 세 개를 나눌 수가 있다. 그리고 두 점에서 이어져야 하기 때문에
각각의 좌표를 섞어서 이용해야 한다.

import sys

t = int(sys.stdin.readline())
for _ in range(t):
    n = int(sys.stdin.readline())
    data, pos = [], []
    fir_x, fir_y = 0, 0
    sec_x, sec_y = 0, 0

    for i in range(n):
        temp = list(sys.stdin.readline().rstrip())
        for j in range(n):
            if temp[j] == '*':
                pos.append((i, j))
        data.append(temp)

    # row is equal
    if pos[0][0] == pos[1][0]:
        if pos[0][0] - 1 < 0:
            fir_x, fir_y = pos[0][0] + 1, pos[0][1]
            sec_x, sec_y = pos[1][0] + 1, pos[1][1]
        else:
            fir_x, fir_y = pos[0][0] - 1, pos[0][1]
            sec_x, sec_y = pos[1][0] - 1, pos[1][1]
    elif pos[0][1] == pos[1][1]:
        if pos[0][1] - 1 < 0:
            fir_x, fir_y = pos[0][0], pos[0][1] + 1
            sec_x, sec_y = pos[1][0], pos[1][1] + 1
        else:
            fir_x, fir_y = pos[0][0], pos[0][1] - 1
            sec_x, sec_y = pos[1][0], pos[1][1] - 1
    else:
        fir_x, fir_y = pos[0][0], pos[1][1]
        sec_x, sec_y = pos[1][0], pos[0][1]

    data[fir_x][fir_y] = '*'
    data[sec_x][sec_y] = '*'

    for i in range(n):
        for j in range(n):
            print(data[i][j], end="")
        print()

좋은 웹페이지 즐겨찾기