Algorithm Problem/Python

[python] SWEA - 1258. [S/W ๋ฌธ์ œํ•ด๊ฒฐ ์‘์šฉ] 7์ผ์ฐจ - ํ–‰๋ ฌ์ฐพ๊ธฐ

deo2kim 2020. 8. 13. 08:16
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

1. 

 

๐Ÿ’จ

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

 from itertools import chain
# ๋‹ต์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ chain
# ์ด์ค‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹จ์ผ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

def findSqure(sx, sy):
    i, j = sx, sy
    # ์•„๋ž˜๋กœ ์ญ‰ ๋‚ด๋ ค๊ฐ€์„œ ์ฐพ๊ณ 
    while i < n and maps[i][j]:
        i += 1
    else:
        i -= 1
	# ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€์„œ ์ฐพ๊ณ 
    while j < n and maps[i][j]:
        j += 1
    else:
        j -= 1
	
    # ํ–‰๋ ฌ์˜ ๋๊ฐ’์„ ์ฐพ์•˜์œผ๋ฉด ๊ทธ ํ–‰๋ ฌ์˜ ๊ฐ’์„ ์ „๋ถ€ 0์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
    changeZero(sx, i+1, sy, j+1)
    result.append([i-sx+1,j-sy+1])


def changeZero(a,b,c,d):
    # ํ–‰ a - b, ์—ด c - d
    for i in range(a,b):
        for j in range(c,d):
            maps[i][j] = 0


for tc in range(1, 1+int(input())):
    n = int(input())
    maps = [list(map(int, input().split())) for _ in range(n)]

    result= []
    for x in range(n):
        for y in range(n):
        # ํ–‰๋ ฌ์ด ์‹œ์ž‘๋˜๋Š” ์  ์ฐพ๊ธฐ
            if maps[x][y]:
                findSqure(x, y)

    answer = sorted(result, key=lambda x: (x[0]*x[1], x[0]))
    ordered_answer = list(chain.from_iterable(answer))

    print('#{} {} {}'.format(tc, len(answer), ' '.join(list(map(str, ordered_answer)))))

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: SW Expert Academy

๋งํฌ: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18LoAqItcCFAZN&categoryId=AV18LoAqItcCFAZN&categoryType=CODE

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com

์œ ์—” ํ™”ํ•™ ๋ฌด๊ธฐ ์กฐ์‚ฌ๋‹จ์ด ๋Œ€๋Ÿ‰ ์‚ด์ƒ ํ™”ํ•™ ๋ฌด๊ธฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ™”ํ•™ ๋ฌผ์งˆ๋“ค์ด ์ €์žฅ๋œ ์ฐฝ๊ณ ๋ฅผ ์กฐ์‚ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ฐฝ๊ณ ์—๋Š” ํ™”ํ•™ ๋ฌผ์งˆ ์šฉ๊ธฐ n2๊ฐœ๊ฐ€ n x n์œผ๋กœ ๋ฐฐ์—ด๋˜์–ด ์žˆ์—ˆ๋‹ค.

์œ ์—” ์กฐ์‚ฌ๋‹จ์€ ๊ฐ ์šฉ๊ธฐ๋ฅผ ์กฐ์‚ฌํ•˜์—ฌ 2์ฐจ์› ๋ฐฐ์—ด์— ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์˜€๋‹ค.

๋นˆ ์šฉ๊ธฐ์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ๋Š” ‘0’์œผ๋กœ ์ €์žฅํ•˜๊ณ , ํ™”ํ•™ ๋ฌผ์งˆ์ด ๋“ค์–ด ์žˆ๋Š” ์šฉ๊ธฐ์— ํ•ด๋‹นํ•˜๋Š” ์šฉ๊ธฐ๋Š” ํ™”ํ•™ ๋ฌผ์งˆ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ‘1’์—์„œ ‘9’์‚ฌ์ด์˜ ์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜์˜€๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ ์ฐฝ๊ณ ์˜ ํ™”ํ•™ ๋ฌผ์งˆ ํ˜„ํ™ฉ์„ 9x9 ๋ฐฐ์—ด์— ์ €์žฅํ•œ ์˜ˆ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.


์œ ์—” ์กฐ์‚ฌ๋‹จ์€ ํ™”ํ•™ ๋ฌผ์งˆ์ด ๋‹ด๊ธด ์šฉ๊ธฐ๋“ค๋กœ๋ถ€ํ„ฐ 3๊ฐ€์ง€ ์‚ฌํ•ญ์„ ๋ฐœ๊ฒฌํ•˜์˜€๋‹ค.

1. ํ™”ํ•™ ๋ฌผ์งˆ์ด ๋‹ด๊ธด ์šฉ๊ธฐ๋“ค์ด ์‚ฌ๊ฐํ˜•์„ ์ด๋ฃจ๊ณ  ์žˆ๋‹ค. ๋˜ํ•œ, ์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€์—๋Š” ๋นˆ ์šฉ๊ธฐ๊ฐ€ ์—†๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ๊ทธ๋ฆผ์—๋Š” 3๊ฐœ์˜ ํ™”ํ•™ ๋ฌผ์งˆ์ด ๋‹ด๊ธด ์šฉ๊ธฐ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜• A, B, C๊ฐ€ ์žˆ๋‹ค.

2. ํ™”ํ•™ ๋ฌผ์งˆ์ด ๋‹ด๊ธด ์šฉ๊ธฐ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜•๋“ค์€ ๊ฐ๊ฐ ์ฐจ์›(๊ฐ€๋กœ์˜ ์šฉ๊ธฐ ์ˆ˜ x ์„ธ๋กœ์˜ ์šฉ๊ธฐ ์ˆ˜)์ด ๋‹ค๋ฅด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ๊ทธ๋ฆผ์—์„œ A๋Š” 3x4, B๋Š” 2x3, C๋Š” 4x5์ด๋‹ค.

3. 2๊ฐœ์˜ ํ™”ํ•™ ๋ฌผ์งˆ์ด ๋‹ด๊ธด ์šฉ๊ธฐ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜•๋“ค ์‚ฌ์ด์—๋Š” ๋นˆ ์šฉ๊ธฐ๋“ค์ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ๊ทธ๋ฆผ์—์„œ A์™€ B ์‚ฌ์ด์™€ B์™€ C ์‚ฌ์ด๋ฅผ ๋ณด๋ฉด, ๋นˆ ์šฉ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ‘0’ ์›์†Œ๋“ค์ด 2๊ฐœ์˜ ์‚ฌ๊ฐํ˜• ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, A์™€ C์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๋Œ€๊ฐ์„  ์ƒ์œผ๋กœ๋Š” ๋นˆ ์šฉ๊ธฐ๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.

์œ ์—” ์กฐ์‚ฌ๋‹จ์€ ์ฐฝ๊ณ ์˜ ์šฉ๊ธฐ๋“ค์— ๋Œ€ํ•œ 2์ฐจ์› ๋ฐฐ์—ด์—์„œ ํ–‰๋ ฌ(ํ™”ํ•™ ๋ฌผ์งˆ์ด ๋“  ์šฉ๊ธฐ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜•)๋“ค์„ ์ฐพ์•„๋‚ด๊ณ  ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ ์ž ํ•œ๋‹ค.

์ฐพ์•„๋‚ธ ํ–‰๋ ฌ๋“ค์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

[์ œ์•ฝ ์‚ฌํ•ญ]

n์€ 100 ์ดํ•˜์ด๋‹ค.

๋ถ€๋ถ„ ํ–‰๋ ฌ์˜ ์—ด์˜ ๊ฐœ์ˆ˜๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋ฉฐ ํ–‰๋ ฌ์˜ ํ–‰์˜ ๊ฐœ์ˆ˜๋„ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 3๊ฐœ์˜ ๋ถ€๋ถ„ํ–‰๋ ฌ ํ–‰๋ ฌ (A(3x4), B(2x3), C(4x5))์ด ์ถ”์ถœ๋˜์—ˆ๋‹ค๋ฉด, ๊ฐ ๋ถ€๋ถ„ ํ–‰๋ ฌ์˜ ํ–‰์˜ ์ˆ˜๋Š” 3, 2, 4๋กœ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ ๋ถ€๋ถ„ ํ–‰๋ ฌ์˜ ์—ด์˜ ์ˆ˜๋„ 4, 3, 5๋กœ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
๊ทธ๋ฃน 1. n <= 10 ์ด๊ณ  sub matrix์˜ ๊ฐœ์ˆ˜ 5๊ฐœ ์ดํ•˜
๊ทธ๋ฃน 2. n <= 40 ์ด๊ณ  5 < sub matrix <= 10
๊ทธ๋ฃน 3. 40 < n <=80 ์ด๊ณ  5 < sub matrix <= 10
๊ทธ๋ฃน 4. 40 < n <=80 ์ด๊ณ  10 < sub matrix <= 15
๊ทธ๋ฃน 5. 80 < n<=100 ์ด๊ณ  15 < sub matrix <= 20

[์ž…๋ ฅ]

๋งจ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๊ฐ ๋ผ์ธ์— ์ฃผ์–ด์ง„๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” (n+1) ์ค„๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ฒซ ์ค„์—๋Š” ์–‘์˜ ์ •์ˆ˜์ธ n์ด ์ฃผ์–ด์ง€๊ณ , ๋‹ค์Œ n์ค„์—๋Š” n x n ํ–‰๋ ฌ์ด (๊ฐ ํ–‰์ด ํ•œ ์ค„์—) ์ฃผ์–ด์ง„๋‹ค.

[์ถœ๋ ฅ]

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐ๊ฐ์— ๋Œ€ํ•œ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

๊ฐ ์ค„์€ ‘#x’๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๊ณต๋ฐฑ์„ ํ•˜๋‚˜ ๋‘” ๋‹ค์Œ, ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ฃผ์–ด์ง„ ํ–‰๋ ฌ์—์„œ ์ถ”์ถœ๋œ ๋ถ€๋ถ„ ํ–‰๋ ฌ๋“ค์„ ๊ฐœ์ˆ˜์™€ ๊ทธ ๋’ค๋ฅผ ์ด์–ด ํ–‰๋ ฌ๋“ค์˜ ํ–‰๊ณผ ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


ํฌ๊ธฐ๋Š” ํ–‰๊ณผ ์—ด์„ ๊ณฑํ•œ ๊ฐ’์œผ๋กœ, ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 3x4 ํ–‰๋ ฌ์˜ ํฌ๊ธฐ๋Š” 3*4 = 12 ์ด๋‹ค.

ํฌ๊ธฐ๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ ํ–‰์ด ์ž‘์€ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 12x4, 8x6 ๋‘ ๊ฐœ์˜ ํ–‰๋ ฌ์€ ๊ฐ™์€ ํฌ๊ธฐ์ด๊ณ  ํ–‰์€ ๊ฐ๊ฐ 12, 8 ์ด๋ฏ€๋กœ 8 6 12 4 ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•