Baek_21608

원성혁·2022년 11월 3일
0

algorithm

목록 보기
12/21
post-thumbnail

삼전 코테 전까지 열심히 준비했던 문제들인데 블로그에 따로 올리지는 못했었다.
이 문제는 삼전 보기 전에 봤었는데 솔직히 구현은 잘 했으나 예외처리 부분에서 잘 안된 부분이 있었다.

import copy
import sys
input = sys.stdin.readline

N = int(input())
command = [list(map(int, input().split())) for _ in range(N**2)]
matrix = [[0]*N for _ in range(N)]
nums = {}
score = [0, 1, 10, 100, 1000]


def love_loc(love):
    tmp = [[0]*N for _ in range(N)]
    mx = 0
    result = list()
    for i in range(N):
        for j in range(N):
            if matrix[i][j] == 0:
                cnt = 0
                for a, b in [[0, 1], [1, 0], [-1, 0], [0, -1]]:
                    ia, jb = i+a, j+b
                    if 0 <= ia < N and 0 <= jb < N and matrix[ia][jb] in love:
                        cnt += 1
                mx = max(mx, cnt)
                tmp[i][j] = cnt
    if mx == 0:
        for i in range(N):
            for j in range(N):
                if matrix[i][j] == 0:
                    result.append((i, j))
    else:
        for i in range(N):
            for j in range(N):
                if tmp[i][j] == mx:
                    result.append((i, j))
    return result


def empty_loc(res):
    tmp = [[0]*N for _ in range(N)]
    mx = 0
    result = list()
    for a, b in res:
        cnt = 0
        for i, j in [[0, 1], [1, 0], [-1, 0], [0, -1]]:
            ia, jb = i+a, j+b
            if 0 <= ia < N and 0 <= jb < N and matrix[ia][jb] == 0:
                cnt += 1
        mx = max(mx, cnt)
        tmp[a][b] = cnt
    if mx == 0:
        return res
    else:
        for i in range(N):
            for j in range(N):
                if tmp[i][j] == mx:
                    result.append((i, j))
        return result


def survey():
    answer = 0
    for i in range(N):
        for j in range(N):
            cnt = 0
            for a, b in [[0, 1], [1, 0], [-1, 0], [0, -1]]:
                ia, jb = i+a, j+b
                if 0 <= ia < N and 0 <= jb < N and matrix[ia][jb] in nums[matrix[i][j]]:
                    cnt += 1
            answer += score[cnt]
    return answer


def solve():
    for i in command:
        num, love = i[0], set(i[1:])
        nums[num] = love
        res = love_loc(love)
        if len(res) > 1:
            res = empty_loc(res)
        a, b = res[0]
        matrix[a][b] = num
    print(survey())


solve()

지금 생각해보면 골드5인거 치사하긴하다.ㅋㅋ
emptyloc 함수에서 if문을 넣어서 예외처리를 해줬는데 그 이유는 어디를 들어가야할지 모르겠는 상황에서의 예외처리이다.
결과적으로는 맞아서 다행이다.

profile
AI개발자를 향해 전진중

0개의 댓글