ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] ๋ฐฑ์ค€ - 1018 ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ
    __Python/__Algorithm 2022. 3. 25. 19:33

      ๋ฌธ์ œ

    https://www.acmicpc.net/problem/1018

     

    ๐Ÿ”น ๋ฌธ์ œ

    ์ง€๋ฏผ์ด๋Š” ์ž์‹ ์˜ ์ €ํƒ์—์„œ MN๊ฐœ์˜ ๋‹จ์œ„ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” M×N ํฌ๊ธฐ์˜ ๋ณด๋“œ๋ฅผ ์ฐพ์•˜๋‹ค. ์–ด๋–ค ์ •์‚ฌ๊ฐํ˜•์€ ๊ฒ€์€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ณ , ๋‚˜๋จธ์ง€๋Š” ํฐ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด ๋ณด๋“œ๋ฅผ ์ž˜๋ผ์„œ 8×8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

    ์ฒด์ŠคํŒ์€ ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰์ด ๋ฒˆ๊ฐˆ์•„์„œ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ฐ ์นธ์ด ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰ ์ค‘ ํ•˜๋‚˜๋กœ ์ƒ‰์น ๋˜์–ด ์žˆ๊ณ , ๋ณ€์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์€ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ •์˜๋ฅผ ๋”ฐ๋ฅด๋ฉด ์ฒด์ŠคํŒ์„ ์ƒ‰์น ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‘ ๊ฐ€์ง€๋ฟ์ด๋‹ค. ํ•˜๋‚˜๋Š” ๋งจ ์™ผ์ชฝ ์œ„ ์นธ์ด ํฐ์ƒ‰์ธ ๊ฒฝ์šฐ, ํ•˜๋‚˜๋Š” ๊ฒ€์€์ƒ‰์ธ ๊ฒฝ์šฐ์ด๋‹ค.

    ๋ณด๋“œ๊ฐ€ ์ฒด์ŠคํŒ์ฒ˜๋Ÿผ ์น ํ•ด์ ธ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์–ด์„œ, ์ง€๋ฏผ์ด๋Š” 8×8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ์ž˜๋ผ๋‚ธ ํ›„์— ๋ช‡ ๊ฐœ์˜ ์ •์‚ฌ๊ฐํ˜•์„ ๋‹ค์‹œ ์น ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋‹น์—ฐํžˆ 8*8 ํฌ๊ธฐ๋Š” ์•„๋ฌด๋ฐ์„œ๋‚˜ ๊ณจ๋ผ๋„ ๋œ๋‹ค. ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

     

    ๐Ÿ”น ์ž…๋ ฅ

    ์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. N๊ณผ M์€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ณด๋“œ์˜ ๊ฐ ํ–‰์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. B๋Š” ๊ฒ€์€์ƒ‰์ด๋ฉฐ, W๋Š” ํฐ์ƒ‰์ด๋‹ค.

    ๐Ÿ”น ์ถœ๋ ฅ

    ์ฒซ์งธ ์ค„์— ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜• ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

      ํ’€์ด ๋ฐฉ๋ฒ•

     

    ๐Ÿ”น ๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜

     

      ๊ตฌํ˜„ ์ฝ”๋“œ

    import sys
    input = sys.stdin.readline
    m,n = map(int,input().split())
    matrix = [list(input()) for _ in range(m)]
    matrix = [[1 if matrix[i][j]=='B' else 0 for j in range (n)] for i in range (m)]
    
    def board(x,y):
        arr = []
        w_check,b_check = 0,0
        check = 0
        for i in range(x,x+8):
            check += sum(matrix[i][y:y+8])
        if check == 0 or check == 64:
            return 32
        for i in range(x,x + 8):
            arr.append(matrix[i][y:y+8])
            org = matrix[i][y:y + 8]
            w_corner = [0,1]*4
            b_corner = [1,0]*4
            if i%2 == 1:
                w_corner = [1,0]*4
                b_corner = [0,1]*4
            w_check += sum([1 for a,b in zip(org,w_corner) if a!=b])
            b_check += sum([1 for a,b in zip(org,b_corner) if a!=b])
    
        return min(w_check,b_check)
    
    change = 32
    for i in range(m-7):
        for j in range(n-7):
            change = min(change,board(i,j))
    print(change)
    import sys
    input = sys.stdin.readline
    m,n = map(int,input().split())
    matrix = [list(input()) for _ in range(m)]
    matrix = [[1 if matrix[i][j]=='B' else 0 for j in range (n)] for i in range (m)]
    
    def board(x,y):
        w_corner,b_corner = 0,0
        check = 0
        for i in range(x,x+8):
            check += sum(matrix[i][y:y+8])
        if check%64 == 0:
            return 32
        for i in range(x,x+8):
            for j in range(y,y+8):
    
                if matrix[i][j]:
                    if (i+j)%2: 
                        b_corner +=1  
                    else:
                        w_corner +=1 
                else:
                    if (i+j)%2:
                        w_corner += 1  
                    else:
                        b_corner += 1  
        return min(b_corner,w_corner)
    
    
    change = 32
    for i in range(m-7):
        for j in range(n-7):
            change = min(change,board(i,j))
    print(change)

     

      ์‹คํ–‰ ๊ฒฐ๊ณผ

      ๐Ÿ’ก

     

     

     

     

     

     

     

     

    728x90

    ๋Œ“๊ธ€

Designed by Tistory.