일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 베스트엘범
- 12869번
- 1038번
- QueryDSL 기초
- 12865번
- 스타트 택시
- SW ExpertAcademy
- 파이썬
- SW Expert Academy
- 15686번
- 키패드 누르기
- 빛의 경로 사이클
- 1789번
- 9095번
- python
- 감소하는 수
- 프로그래머스
- 19238번
- 16234번
- 수식 최대화
- 경주로 건설
- HTML 기초
- 보석 쇼핑
- 미세먼지 안녕!
- 14499번
- 백준 알고리즘
- 2020 카카오 인턴십
- 17144번
- 어른 상어
- 거울 설치
Archives
- Today
- Total
보물창고 블로그
SW Expert Academy 5644. [모의 SW 역량테스트] 무선 충전 본문
728x90
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
해결한 코드는 아래와 같다.
def checker(x, y, chargers):
sub = []
for i in range(len(chargers)):
cy, cx, c, p = chargers[i]
cy -= 1
cx -= 1
if abs(cy - y) + abs(cx - x) <= c:
sub.append(i)
return sub
t = int(input())
for test in range(1, t + 1):
m, a = map(int, input().split())
m1 = list(map(int, input().split()))
m2 = list(map(int, input().split()))
charger = [list(map(int, input().split())) for _ in range(a)]
time = 0
s1 = 0
s2 = 0
x1, y1 = 0, 0
x2, y2 = 9, 9
while time <= m:
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
c1 = checker(x1, y1, charger)
c2 = checker(x2, y2, charger)
# 둘다 없을 때
if not c1 and not c2:
pass
elif len(c1) == 0:
c2.sort(key=lambda x: charger[x][3], reverse=True)
s2 += charger[c2[0]][3]
elif len(c2) == 0:
c1.sort(key=lambda x: charger[x][3], reverse=True)
s1 += charger[c1[0]][3]
# 둘다 1개씩일 때
elif len(c1) == 1 and len(c2) == 1:
# 서로 같지 않을 때
if c1[0] != c2[0]:
s1 += charger[c1[0]][3]
s2 += charger[c2[0]][3]
# 서로 같을 때
elif c1[0] == c2[0]:
s1 += charger[c1[0]][3] // 2
s2 += charger[c2[0]][3] // 2
elif len(c1) == 1:
s1 += charger[c1[0]][3]
mv2 = 0
for i in c2:
if i != c1[0] and mv2 < charger[i][3]:
mv2 = charger[i][3]
s2 += mv2
elif len(c2) == 1:
s2 += charger[c2[0]][3]
mv1 = 0
for i in c1:
if i != c2[0] and mv1 < charger[i][3]:
mv1 = charger[i][3]
s1 += mv1
# 둘다 2개이상씩 될 때
else:
c1.sort(key=lambda x: charger[x][3], reverse=True)
c2.sort(key=lambda x: charger[x][3], reverse=True)
if c1[0] == c2[0]:
if charger[c1[1]][3] > charger[c2[1]][3]:
s1 += charger[c1[1]][3]
s2 += charger[c2[0]][3]
else:
s1 += charger[c1[0]][3]
s2 += charger[c2[1]][3]
else:
s1 += charger[c1[0]][3]
s2 += charger[c2[0]][3]
if time < m:
mov1 = m1[time]
mov2 = m2[time]
if mov1 != 0:
x1 += dx[mov1 - 1]
y1 += dy[mov1 - 1]
if mov2 != 0:
x2 += dx[mov2 - 1]
y2 += dy[mov2 - 1]
time += 1
print('#{} {}'.format(test, s1 + s2))
'알고리즘 풀이 > SW Expert Academy' 카테고리의 다른 글
SW Expert Academy 2477. [모의 SW 역량테스트] 차량 정비소 풀이 With Python (0) | 2020.03.25 |
---|---|
SW Expert Academy 1949. [모의 SW 역량테스트] 등산로 조성 풀이 With Python (0) | 2020.03.25 |
SW Expert Academy 5648. [모의 SW 역량테스트] 원자 소멸 시뮬레이션 (0) | 2020.03.10 |
SW Expert Academy 5650. [모의 SW 역량테스트] 핀볼 게임 (0) | 2020.03.10 |
SW Expert Academy 2115. [모의 SW 역량테스트] 벌꿀채취 (0) | 2020.03.04 |
Comments