땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • ㅗ
  • I
  • 이것이 리눅스다 with Rocky Linux9
  • D
  • E

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Algorithm/Algorithm Problem

백준 1461 도서관(구현, 그리디)

2022. 6. 3. 20:04

https://www.acmicpc.net/problem/1461

 

1461번: 도서관

세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책

www.acmicpc.net

규칙을 찾는게 중요한 문제였다. 시작점 0에서 음수, 양수 편을 나누고 m만큼 left[m * i] , right[m * i] 간다음에

제일 큰 수에서는 0으로 다시 돌아오지 않고 그 자리에서 끝나면 된다.

 

유의할점은 left, right의 길이가 m으로 나누어 떨어지지 않을 경우 나머지 k만큼 먼저 간다음에 k에서 시작하여

m*i 만큼 계속 더해주는게 핵심이였다.

n,m = list(map(int,input().split()))
data = list(map(int,input().split()))
data.sort()

left = []
right = []
max_value = 0
for i in data:
    if i < 0:
        left.append(-i)
        max_value = max(max_value,-i)
    else:
        right.append(i)
        max_value = max(max_value,i)

res = 0
left = left[::-1]


left_value = len(left) // m
left_remainer = len(left) % m
right_value = len(right) // m
right_remainer = len(right) % m

if left_remainer > 0:
    idx = left_remainer-1
    for i in range(idx,len(left),m):
        res += left[i] * 2
else:
    for i in range(m-1,len(left),m):
        res += left[i] * 2

if right_remainer > 0:
    idx = right_remainer-1
    for i in range(idx,len(right),m):
        res += right[i] * 2
else:
    for i in range(m-1,len(right),m):
        res += right[i] * 2
print(res - max_value)

'Algorithm > Algorithm Problem' 카테고리의 다른 글

백준 2872 우리집엔 도서관이 있어(그리디)  (0) 2022.06.08
백준 16926 배열 돌리기 1(구현) ★  (0) 2022.06.04
백준 16943 숫자 재배치(순열, 구현)  (0) 2022.06.03
백준 1911 흙길 보수하기(구현,그리디)  (0) 2022.06.03
백준 15729 방탈출(그리디)  (0) 2022.06.03
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 2872 우리집엔 도서관이 있어(그리디)
    • 백준 16926 배열 돌리기 1(구현) ★
    • 백준 16943 숫자 재배치(순열, 구현)
    • 백준 1911 흙길 보수하기(구현,그리디)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바