๐ ์์ฉ๋์ด ์์๊ฒ ์ถ๋ ฅํ๊ธฐ
๋ฐฑ์ค Gold4
์์ฉ๋์ด ์์๊ฒ ์ถ๋ ฅํ๊ธฐ
๋ฌธ์
ํฌ๊ธฐ๊ฐ ๋ฌดํ์ธ ์ ์ฌ๊ฐํ ๋ชจ๋์ข ์ด๊ฐ ์๋ค. ๋ชจ๋์ข ์ด์ ๊ฐ ์ ์ฌ๊ฐํ์ ํ๊ณผ ์ด์ ์์ผ๋ก ํํํ ์ ์๋ค.
์ด ๋ชจ๋์ข ์ด ์ ์ฒด๋ฅผ ์์ ์ ์์ ์์ฉ๋์ด ๋ชจ์์ผ๋ก ์ฑ์ธ ๊ฒ์ด๋ค. ์ผ๋จ ์ซ์ 1์ 0ํ 0์ด์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ 0ํ 1์ด์ ์ซ์ 2๋ฅผ ์ด๋ค. ๊ฑฐ๊ธฐ์ ๋ถํฐ ์์ฉ๋์ด๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ์์๋๋ค. ๋ค์ ์ซ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฑ์ฐ๋ฉด ๋๋ค.
-3 -2 -1 0 1 2 3
--------------------
-3 |37 36 35 34 33 32 31
-2 |38 17 16 15 14 13 30
-1 |39 18 5 4 3 12 29
0 |40 19 6 1 2 11 28
1 |41 20 7 8 9 10 27
2 |42 21 22 23 24 25 26
3 |43 44 45 46 47 48 49
์ด ๋ฌธ์ ๋ ์์ ๊ฐ์ด ์ฑ์ด ๊ฒ์ ์์๊ฒ ์ถ๋ ฅํ๋ฉด ๋๋ค. r1, c1, r2, c2๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค. r1, c1์ ๊ฐ์ฅ ์ผ์ชฝ ์ ์นธ์ด๊ณ , r2, c2๋ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ด๋ค.
์์๊ฒ ์ถ๋ ฅํ๋ค๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค.
- ์ถ๋ ฅ์ r1ํ๋ถํฐ r2ํ๊น์ง ์ฐจ๋ก๋๋ก ์ถ๋ ฅํ๋ค.
- ๊ฐ ์์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ๋ค.
- ๋ชจ๋ ํ์ ๊ฐ์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
- ๊ณต๋ฐฑ์ ๊ธธ์ด๋ ์ต์๋ก ํด์ผ ํ๋ค.
- ๋ชจ๋ ์ซ์์ ๊ธธ์ด(์์ ๋ถ๋ ๊ณต๋ฐฑ์ ํฌํจ)๋ ๊ฐ์์ผ ํ๋ค.
- ๋ง์ฝ ์์ ๊ธธ์ด๊ฐ ๊ฐ์ฅ ๊ธธ์ด๊ฐ ๊ธด ์๋ณด๋ค ์๋ค๋ฉด, ์ผ์ชฝ์์๋ถํฐ ๊ณต๋ฐฑ์ ์ฝ์ ํด ๊ธธ์ด๋ฅผ ๋ง์ถ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ค ์ ์ r1, c1, r2, c2๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
r2 - r1 + 1๊ฐ์ ์ค์ ์์ฉ๋์ด๋ฅผ ์์๊ฒ ์ถ๋ ฅํ๋ค
์ ํ
- -5000 โค r1, c1, r2, c2 โค 5,000
- 0 โค r2 - r1 โค 49
- 0 โค c2 - c1 โค 4
์์ ์ ๋ ฅ 1
-3 -3 2 0
์์ ์ถ๋ ฅ 1
37 36 35 34
38 17 16 15
39 18 5 4
40 19 6 1
41 20 7 8
42 21 22 23
์์ ์ ๋ ฅ 2
-2 2 0 3
์์ ์ถ๋ ฅ 2
13 30
12 29
11 28
์์ ์ ๋ ฅ 3
-1 -2 -1 1
์์ ์ถ๋ ฅ 3
18 5 4 3
์์ ์ ๋ ฅ 4
0 0 0 0
์์ ์ถ๋ ฅ 4
1
๐ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ
์ฌ์ฉ ์๊ณ ๋ฆฌ์ฆ ์์.
๐ ๊ณผ์ ์ค๊ณ/๊ด๋ฆฌ ๐
๋๋ฅผ ์๋นํ ๊ดด๋กญํ๋ ๋ฌธ์ โฆ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ์ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ฐ๋ณตํ๋ค ์๋ฃจ์ ์ฐธ๊ณ .
๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ
๊ท์น์ ์ฐพ์๋ค. ์ค์ฌ๋ถ โ1โ์ ๊ธฐ์ค์ผ๋ก ์ด๋ก ํ๊ดํ์ด Level1 ๋ถ์ ํ๊ดํ์ด Level2 ํ๋ ํ๊ดํ์ด Level3๋ฅผ ์๋ฏธํ๋ค.
โn = Levelโ์ด๋ผ๊ณ ํ๋ฉด n์ด ๋์ด๋ ๋๋ง๋ค ์๋์ ๊ท์น์ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
- โก๏ธ 1๋ฒ
- โฌ๏ธ 2n-1๋ฒ
- โฌ ๏ธโฌ๏ธโก๏ธ 2n๋ฒ
๊ทธ๋ ๊ฒ ์ ์ฒด ์์ฉ๋์ด ๋งต์ ๋จผ์ ์์ฑํ ํ, ์กฐ๊ฑด์ ๋ง๋ ๋ถ๋ถ ์์ฉ๋์ด๋ฅผ ์ถ๋ ฅํ๋ฉด ํด๊ฒฐ
๊ทธ๋ฌ๋ ๋ฌธ์ ์ ์กฐ๊ฑด์์ ์ ์ฒด ์์ฉ๋์ด๋ฅผ ๋ฌป๋ ๊ฒฝ์ฐ๋ ์๊ธฐ์ ์ ์ฒด ์์ฉ๋์ด ๋ฐฐ์ด์ ๋จผ์ ๋ง๋ค๊ณ ์์ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ๋ฐ์
- -5000 โค r1, c1, r2, c2 โค 5,000
- 0 โค r2 - r1 โค 49
- 0 โค c2 - c1 โค 4
์ ํ ์กฐ๊ฑด์ ๋ณด๋ฉด ์ ์ฒด ์์ฉ๋์ด๋ 5000 Level๊น์ง ์์ฑํ ์ ์์ง๋ง ๋ถ๋ถ ์์ฉ๋์ด๋ ๋ฝํด๋ด์ผ ๋ฒ์๊ฐ 50*5๊ฐ ์ต๋๋ค.
๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ (r,c)๊ฐ ์ ๋ ฅ ์กฐ๊ฑด์ ๋ถํฉํ ๋๋ง ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
์๊ฐ ์ด๊ณผ
์ด๊ธฐ ์ฝ๋์ โr1โฆxโฆr2โ โc1โฆyโฆc2โ ์กฐ๊ฑด์ผ ๋๋ง ์์ฉ๋์ด ๋ฐฐ์ด์ ์ถ๊ฐํ๋๋ก ์์ ํ์๋ค.
ํ์ง๋ง ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ์๋๋ฐ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ์ ๋๊ฐ๋ค๊ณ ์์ํ๋ค.
์ ์ฒด ์์ฉ๋์ด๋ฅผ ์ํํ๋ ๋ฐฐ์ด์ ์์ ๊ณ ๋ถ๋ถ ์์ฉ๋์ด ๋ฐฐ์ด๋ก ์ค์ธ ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ผ์ง๋ง
์๊ฐ์ ์ธ ์ธก๋ฉด์์ ๋ณด์์ ๋, ์ ์ฒด ์์ฉ๋์ด๋ฅผ ์ฌ์ ํ ์ํํ๋ฏ๋ก ์ด๋ฅผ ์ค์ฌ์ผ ํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
์ ๋ต
์ด๊ฑด ์์งํ ์ต๊น๋ผ๊ณ ์๊ฐํ๋ค. ์ด๋ ค์์ ์ํ ์ด๋ ค์์ด๋๊น.
r1~r2 , c1~c2 ๋ชจ๋ ์ขํ๋ฅผ ํ์ํ๋ฉฐ ์์ฉ๋์ด[r][c]์ ๊ฐ์ด ๋ฌด์์ธ์ง ์ํ์ ์ผ๋ก ํ๋ณํด๋ธ๋ค.
์ฐ์ r๊ณผ c์ ์ ๋๊ฐ์ ํตํด ์ด๋ค Level์ ์ํด์๋์ง๋ฅผ ์์๋ธ๋ค.
ํด๋น Level์์ ์ฐ์ธกํ๋จ์ ๊ฐ์ ์์๋ธ๋ค.
์ฐ์ธกํ๋จ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐ์ ํ์ฌ (r,c)์ ๊ฐ์ ์์๋ธ๋ค.
์ฐ์ธกํ๋จ = (2Level+1)^2
(r,c)๊ฐ Level์ ์๋ ๋ณ์ ์ํ๋ค๋ฉด (r,c)์ ๊ฐ = (์ฐ์ธกํ๋จ - (Level - c))
์ผ์ชฝ๋ณ์ด๋ผ๋ฉด (์ฐ์ธกํ๋จ - 2Level - (Level - r))
์๋ณ์ด๋ผ๋ฉด (์ฐ์ธกํ๋จ - 4Level - (Level + c))
์ค๋ฅธ์ชฝ๋ณ์ด๋ผ๋ฉด (์ฐ์ธกํ๋จ - 6Level - (Level+r))
์ดํด๊ฐ ์ฝ๋๋ก ์์ ๊ทธ๋ฆผ์ ๋ณด์ฌ์ฃผ๊ฒ ๋ค.
+ Alpha ๐
์์๊ฒ ์ถ๋ ฅํ ๋ ์ด ์ ์ฉํ Python ๋ด์ฅ ํจ์๊ฐ ์์ด์ ์๊ฐํ๋ ค๊ณ ํ๋ค.
๋ฐ๋ก zfill, ljust, rjust์ด๋ค. ์ค๋ช ํ๊ธฐ ๊ท์ฐฎ์ผ๋ ๋งํฌ๋ฅผ ๊ฑธ๊ฒ ๋ค.
๐จ๐ปโ๐ป CODE
๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ
import sys
input = sys.stdin.readline
r1,c1,r2,c2 = map(int,input().split())
maximum = max(abs(r1),abs(c1),abs(r2),abs(c2))
tonado = [[1]*(2*maximum+1) for _ in range(2*maximum+1)]
x,y = maximum, maximum
for n in range(1,maximum+1):
# right
current = tonado[x][y]
y += 1
tonado[x][y] = current + 1
# up
for i in range(2*n-1):
current = tonado[x][y]
x -= 1
tonado[x][y] = current + 1
# left
for i in range(2*n):
current = tonado[x][y]
y -= 1
tonado[x][y] = current + 1
# down
for i in range(2*n):
current = tonado[x][y]
x += 1
tonado[x][y] = current + 1
# right
for i in range(2*n):
current = tonado[x][y]
y += 1
tonado[x][y] = current + 1
# ํ(r1~r2), ์ด(c1~c2) ์ถ๋ ฅ
answer = []
for row in range(r1+maximum,r2+maximum+1):
answer.append(tonado[row][c1+maximum:c2+maximum+1])
# ๊ฐ์ฅ ํฐ ์๋ฆฟ์
digit = 0
for i in range(len(answer)):
digit = max(digit,max(answer[i]))
digit = len(str(digit))
# ์ ๋ต ํ๋ ฌ ๋ฌธ์ํ์ผ๋ก ๋ฐ๊พธ๊ธฐ
answer = [list(map(str,sub)) for sub in answer]
# ์ ๋ต ํ๋ ฌ ์์๊ฒ ๋ฐ๊พธ๊ธฐ
for i in range(len(answer)):
for j in range(len(answer[i])):
if len(answer[i][j]) < digit:
answer[i][j] = answer[i][j].rjust(digit,' ')
# ์ต์ข
์ ๋ต ํ๋ ฌ ์์๊ฒ ์ถ๋ ฅ
for i in range(len(answer)):
print(*answer[i])
์๊ฐ ์ด๊ณผ
import sys
input = sys.stdin.readline
r1,c1,r2,c2 = map(int,input().split())
maximum = max(abs(r1),abs(c1),abs(r2),abs(c2))
tonado = [[1]*(c2-c1+1) for _ in range(r2-r1+1)]
# Base Case
x,y = 0,0
current = 1
if r1<=x<=r2 and c1<=y<=c2:
tonado[x-r1][y-c1] = str(current)
for n in range(1,maximum+1):
# right
y += 1
current += 1
if r1<=x<=r2 and c1<=y<=c2:
tonado[x-r1][y-c1] = str(current)
# up
for i in range(2*n-1):
x -= 1
current += 1
if r1<=x<=r2 and c1<=y<=c2:
tonado[x-r1][y-c1] = str(current)
# left
for i in range(2*n):
y -= 1
current += 1
if r1<=x<=r2 and c1<=y<=c2:
tonado[x-r1][y-c1] = str(current)
# down
for i in range(2*n):
x += 1
current += 1
if r1<=x<=r2 and c1<=y<=c2:
tonado[x-r1][y-c1] = str(current)
# right
for i in range(2*n):
y += 1
current += 1
if r1<=x<=r2 and c1<=y<=c2:
tonado[x-r1][y-c1] = str(current)
# ์ ๋ต ํ๋ ฌ ์์๊ฒ ๋ฐ๊พธ๊ธฐ
digit = 0
for i in range(len(tonado)):
for j in range(len(tonado[i])):
digit = max(digit,len(tonado[i][j]))
if len(tonado[i][j]) < digit:
tonado[i][j] = tonado[i][j].rjust(digit,' ')
# ์ต์ข
์ ๋ต ํ๋ ฌ ์์๊ฒ ์ถ๋ ฅ
for i in range(len(tonado)):
print(*tonado[i])
์ ๋ต
import sys
input = sys.stdin.readline
def getValue(r,c):
n=max(abs(r), abs(c))
last= (2*n+1)**2
if r==n:#์๋ ๋ณ
return last-(n-c)
elif c==-n:#์ผ์ชฝ ๋ณ
return last-(2*n)-(n-r)
elif r==-n:#์ ๋ณ
return last-(4*n)-(n+c)
else: #์ค๋ฅธ์ชฝ ๋ณ
return last-(6*n)-(n+r)
r1,c1,r2,c2 = map(int,input().split())
tonado = []
for x in range(r1,r2+1):
for y in range(c1,c2+1):
tonado.append(str(getValue(x,y)))
tonado.append('\n')
# ์ต๋ ์๋ฆฌ์ ์ฐพ๊ธฐ
digit = 0
for i in range(len(tonado)):
if tonado[i] == '\n':
continue
digit = max(digit,len(tonado[i]))
# ์ ๋ต ํ๋ ฌ ์์๊ฒ ๋ฐ๊พธ๊ธฐ
for i in range(len(tonado)):
if tonado[i] == '\n':
continue
tonado[i] = tonado[i].rjust(digit,' ')
# ์ต์ข
์ ๋ต ํ๋ ฌ ์์๊ฒ ์ถ๋ ฅ
for i in range(len(tonado)):
if tonado[i] == '\n':
print()
else:
print(tonado[i],end=' ')