-풀이
#책의개수, 들고갈 수 있는 개수
book_count, pick = map(int,input().split())
#책의 위치들
book_position = list(map(int,input().split()))
minus = []
plus = []
#최대 거리 담는 변수(도착지점)
max_val = 0
#답
ans = 0
#왼쪽(음수), 오른쪽(양수)으로 나눔
for i in book_position:
if i < 0:
minus.append(i)
else:
plus.append(i)
#최대 거리 구하기
if abs(i) > abs(max_val):
max_val = i
plus.sort(reverse=True)
minus.sort()
distance = []
#양수, 들고갈 수 있는 개수만큼 점프하면서 누적
for i in range(0, len(plus), pick):
#최대거리 아니면 distance리스트에 거리 추가
if plus[i] != max_val:
distance.append(plus[i])
#음수, 들고갈 수 있는 개수만큼 점프하면서 누적
for i in range(0, len(minus), pick):
#최대거리 아니면 distance리스트에 거리 추가
if minus[i] != max_val:
distance.append(minus[i])
#최대 거리는 1배
answer = abs(max_val)
#최대 거리가 아니면 출발점으로 돌아와야해서 2배
for k in distance:
answer += abs(k*2)
print(answer)
-풀이설명
처음에 정답과 비슷했지만 중복된 코드도 많고 음수가 많을때, 양수가 많을때, 음수와 양수 갯수가 같을 때, 음수 양수 거리가 똑같을 때 등 많은 경우의 수를 생각하다 보니 조건문이 많아졌고 예제 출력은 다 잘 나왔지만 틀렸다고 떴다. 모든 조건을 생각하면서 풀어야 하지만 하나하나 다 신경쓰다보니 더 꼬인 것 같다. 반복문을 각 조건마다 여러차례 사용할 필요 없이 최대거리 인 것만 아니면 minus,plus리스트에 있는 원소들을 pick만큼 점프하면서 distance리스트에 가져와서 *2를 하여 최대거리와 더해주면 가볍게 해결되었다.
'알고리즘' 카테고리의 다른 글
[순열/수학] 백준 1722 파이썬 (순열의 순서) 골드5 (0) | 2022.05.29 |
---|---|
[구현/정규표현식] 백준 1013파이썬 (Contact) 골드5 (0) | 2022.05.28 |
[정렬,집합] 백준 1822파이썬 (차집합) 실버4 (0) | 2022.05.26 |
[다익스트라] 백준 1753파이썬 (최단경로) 골드5 (0) | 2022.05.25 |
[DFS/재귀] 백준 1405 파이썬 (미친 로봇) 골드5 (0) | 2022.05.24 |