반응형

-풀이

#책의개수, 들고갈 수 있는 개수
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를 하여 최대거리와 더해주면 가볍게 해결되었다.

+ Recent posts