๐ŸŒ€ ์†Œ์šฉ๋Œ์ด ์˜ˆ์˜๊ฒŒ ์ถœ๋ ฅํ•˜๊ธฐ

๋ฐฑ์ค€ 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๋Š” ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์นธ์ด๋‹ค.

์˜ˆ์˜๊ฒŒ ์ถœ๋ ฅํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  1. ์ถœ๋ ฅ์€ r1ํ–‰๋ถ€ํ„ฐ r2ํ–‰๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
  2. ๊ฐ ์›์†Œ๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  3. ๋ชจ๋“  ํ–‰์€ ๊ฐ™์€ ๊ธธ์ด๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
  4. ๊ณต๋ฐฑ์˜ ๊ธธ์ด๋Š” ์ตœ์†Œ๋กœ ํ•ด์•ผ ํ•œ๋‹ค.
  5. ๋ชจ๋“  ์ˆซ์ž์˜ ๊ธธ์ด(์•ž์— ๋ถ™๋Š” ๊ณต๋ฐฑ์„ ํฌํ•จ)๋Š” ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
  6. ๋งŒ์•ฝ ์ˆ˜์˜ ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ๊ธธ์ด๊ฐ€ ๊ธด ์ˆ˜๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ๊ณต๋ฐฑ์„ ์‚ฝ์ž…ํ•ด ๊ธธ์ด๋ฅผ ๋งž์ถ˜๋‹ค.

์ž…๋ ฅ


์ฒซ์งธ ์ค„์— ๋„ค ์ •์ˆ˜ 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

๐Ÿ“– ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ

์‚ฌ์šฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—†์Œ.

๐Ÿ“ ๊ณผ์ • ์„ค๊ณ„/๊ด€๋ฆฌ ๐Ÿ”—

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-08-02 แ„‹แ…ฉแ„’แ…ฎ 1 14 10

๋‚˜๋ฅผ ์ƒ๋‹นํžˆ ๊ดด๋กญํ˜”๋˜ ๋ฌธ์ œโ€ฆ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ์™€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค ์†”๋ฃจ์…˜ ์ฐธ๊ณ .

๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ

แ„‚แ…ฉแ„แ…ณแ„‡แ…ฎแ†จ-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))

์ดํ•ด๊ฐ€ ์‰ฝ๋„๋ก ์˜ˆ์‹œ ๊ทธ๋ฆผ์„ ๋ณด์—ฌ์ฃผ๊ฒ ๋‹ค.

แ„‚แ…ฉแ„แ…ณแ„‡แ…ฎแ†จ-3

+ 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=' ')

ยฉ 2022. All rights reserved.

Powered by Hydejack v9.1.6