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()
Author And Source
이 문제에 관하여(B. Almost Rectangle | Round #713 Div.3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jsin2475/B.-Almost-Rectangle-Round-713-Div.3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)