소스 코드

T = int(input())

# 이동 방향
# 이동 X 상 우 하 좌
x = [0,0,1,0,-1]
y = [0,-1,0,1,0]

for tc in range(1,1+T):

    # 이동 시간 m, BC의 개수 a
    m,a = map(int,input().split())

    # 이동 정보
    move_a = list(map(int,input().split()))
    move_b = list(map(int,input().split()))

    # BC의 정보
    board = [0 for _ in range(a)]
    for q in range(a):

        # 위치, 범위 c, 성능 p
        # 위치에서 -1씩 해줘야 함
        board[q] = list(map(int,input().split()))

    # 현재 위치
    idx_a = [0,0]
    idx_b = [9,9]

    # 현재까지의 합
    res = 0

    # 이동 정보 불러오기 위한 idx
    # 초기 위치에서도 충전하기 위해 -1로 시작
    idx = -1
    while idx != m:

        # 현재 최대 값
        temp_res = 0

        a_i, a_j = idx_a
        b_i, b_j = idx_b

        # BC 불러와서 조건 확인
        for w in range(a):
            w_i, w_j, w_c, w_p = board[w]
            temp_a = 0

            # BC의 범위 안에 있는지 확인
            if abs(w_i - a_i - 1) + abs(w_j - a_j - 1) <= w_c:
                temp_a += w_p

            for e in range(a):
                e_i, e_j, e_c, e_p = board[e]
                temp_b = 0
                if abs(e_i - b_i - 1) + abs(e_j - b_j - 1) <= e_c:
                    
                    # 같은 BC 조건으로 확인하고, a도 그 BC 안에 있으면
                    # BC를 나눠 갖는데, 이미 a에서 더했으므로 더해줄 필요 없음
                    if w == e and temp_a != 0:
                        pass                    
                    else:
                        temp_b += e_p

                # 현재 최대 값 갱신
                if temp_res < temp_a + temp_b:
                    temp_res = temp_a + temp_b

        idx += 1

        if idx != m:
            idx_a = [idx_a[0] + x[move_a[idx]], idx_a[1] + y[move_a[idx]]]
            idx_b = [idx_b[0] + x[move_b[idx]], idx_b[1] + y[move_b[idx]]]

        res += temp_res

    print('#{} {}'.format(tc,res))

 


해결 방법

1. 해당 문제를 해결하기 위해 먼저 생각해야할 조건은

1) 시작 위치에서도 충전한다

2) 같은 BC에 있는 경우, 사용자의 수만큼 충전양을 분배한다

3) BC의 성능 P의 중복값에 대한 내용이 없다 == 중복이 있을 수도 있고, 없을 수도 있다(알 수 없음)

이라고 생각함

 

2. 시작 위치에서도 충전한다 => 시작할 때 따로 확인하기 or idx값을 -1로 놓고 진행하기 두 가지로 해결방법을 생각

 

3. 같은 BC에 있는 경우 => a b 순서로 확인하기 때문에 이미 a에서 값을 더 한 경우 b에서는 계산 생략

 

4. 성능 P의 중복값에 대한 내용이 없다 => 중복이 있다는 가정하에 문제 해결


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.