소스 코드
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. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
[SWEA 코딩] 초보자를 위한 점프대 배치하기 - PYTHON #3503 (0) | 2021.06.25 |
---|---|
[SWEA 코딩] 정사각형 방 - PYTHON #1861 (0) | 2021.06.22 |
[SWEA 코딩] [SW 모의역량 테스트] 탈주범 검거 - PYTHON #1953 (0) | 2021.06.20 |
[SWEA 코딩] S/W 문제해결 응용 사람 네트워크2 - PYTHON #1263 (0) | 2021.06.19 |
[SWEA 코딩] [SW 모의역량 테스트] 숫자 만들기 - PYTHON #4008 (0) | 2021.06.18 |