[ ๐—•๐—ข๐— ] 1461๋ฒˆ ๋„์„œ๊ด€ - ๊ทธ๋ฆฌ๋”” | JavaScript

NewHaยท2025๋…„ 5์›” 2์ผ
0
post-thumbnail

๐ŸŽฏ ๋ฌธ์ œ ์„ค๋ช…

๐Ÿงฉ ๋ฐฑ์ค€ 1461๋ฒˆ - ๋„์„œ๊ด€ | ๊ณจ๋“œ4

์„ธ์ค€์ด๋Š” ๋„์„œ๊ด€์—์„œ ์ผํ•œ๋‹ค. ๋„์„œ๊ด€์˜ ๊ฐœ๋ฐฉ์‹œ๊ฐ„์ด ๋๋‚˜์„œ ์„ธ์ค€์ด๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งˆ๊ตฌ ๋†“์€ ์ฑ…์„ ๋‹ค์‹œ ๊ฐ€์ ธ๋‹ค ๋†“์•„์•ผ ํ•œ๋‹ค. ์„ธ์ค€์ด๋Š” ํ˜„์žฌ 0์— ์žˆ๊ณ , ์‚ฌ๋žŒ๋“ค์ด ๋งˆ๊ตฌ ๋†“์€ ์ฑ…๋„ ์ „๋ถ€ 0์— ์žˆ๋‹ค. ๊ฐ ์ฑ…๋“ค์˜ ์›๋ž˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ฑ…์„ ๋ชจ๋‘ ์ œ์ž๋ฆฌ์— ๋†”๋‘˜ ๋•Œ ๋“œ๋Š” ์ตœ์†Œ ๊ฑธ์Œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์„ธ์ค€์ด๋Š” ํ•œ ๊ฑธ์Œ์— ์ขŒํ‘œ 1์นธ์”ฉ ๊ฐ€๋ฉฐ, ์ฑ…์˜ ์›๋ž˜ ์œ„์น˜๋Š” ์ •์ˆ˜ ์ขŒํ‘œ์ด๋‹ค. ์ฑ…์„ ๋ชจ๋‘ ์ œ์ž๋ฆฌ์— ๋†”๋‘” ํ›„์—๋Š” ๋‹ค์‹œ 0์œผ๋กœ ๋Œ์•„์˜ฌ ํ•„์š”๋Š” ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ธ์ค€์ด๋Š” ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ M๊ถŒ์˜ ์ฑ…์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ž…๋ ฅ

  • ์ฒซ์งธ ์ค„
    • ์ฑ…์˜ ๊ฐœ์ˆ˜ N (N โ‰ค 50)
    • ์„ธ์ค€์ด๊ฐ€ ํ•œ ๋ฒˆ์— ๋“ค์ˆ˜ ์žˆ๋Š” ์ฑ…์˜ ๊ฐœ์ˆ˜ M (M โ‰ค 50)
  • ๋‘˜์งธ ์ค„ : ์ฑ…์˜ ์œ„์น˜ (not 0, and |n| โ‰ค 10,000)
7 2
-37 2 -6 -39 -29 11 -28

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

131

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋ฌธ์ œ ํ’€์ด

์šฐ์„  ์ฑ…๋“ค์ด 0์— ์žˆ์œผ๋ฏ€๋กœ, ๋งˆ์ง€๋ง‰์„ ์ œ์™ธํ•˜๊ณ ์„œ๋Š” M๊ถŒ์„ ๊ฐ€์ ธ๋‹ค ๋†“๊ณ  ๋‹ค์‹œ 0์œผ๋กœ ๋Œ์•„์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋‹จ ํ•œ๋ฒˆ์€ ํŽธ๋„๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œ๋กœ ๊ฑธ์Œํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด ํŽธ๋„๋ฅผ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ˆ๋Œ€๊ฐ’์ด ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•˜์—ฌ, ๊ฐ€์žฅ ๋จผ ๊ณณ์—์„œ ๋๋‚ด๊ณ  ๋Œ์•„์˜ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ตœ์†Œ๋กœ ๊ฑธ์Œํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€์˜ ๊ฒฝ์šฐ๋Š” ์™•๋ณต์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๊ฐ ๊ฑธ์Œ๋งˆ๋‹ค ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ * 2 ๋งŒํผ ๊ฑธ์Œํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋งค ์ˆœ๊ฐ„ ์ตœ์„ ์˜ ์„ ํƒ์ธ ์ตœ๋Œ€ํ•œ ๋จผ ๊ณณ์— ๊ฐ€์„œ M๊ถŒ์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋Œ์•„์˜ค๋Š” ๋ฐฉ์‹์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋จผ ๊ณณ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด, ๋ฉ€๋ฆฌ ๋‘ ๋ฒˆ ๊ฐ€์•ผํ•˜๋Š” ๋น„ํšจ์œจ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๋˜ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ํ•œ ๋งŽ์ด ์ฑ…์„ ๊ฐ€์ ธ๋‹ค ๋†“์•„์•ผ ์™•๋ณต ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•ด์„œ ๊ฑฐ๋ฆฌ๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์„ ํƒ ์กฐ๊ฑด์ด ์ตœ์„ ์˜ ํŒ๋‹จ์ด๊ณ  ์ด๋Ÿฌํ•œ ์ „๋žต์ด ๊ทธ๋ฆฌ๋“œ์ž…๋‹ˆ๋‹ค.

์ด์— ๋”ฐ๋ผ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ์„ , ๊ทธ๋ฆฌ๋””๋ฅผ ์œ„ํ•œ ์ „์ฒ˜๋ฆฌ๋กœ ๊ฑฐ๋ฆฌ ์ˆœ์œผ๋กœ ์œ„์น˜๋ฅผ ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฑ… ์œ„์น˜๋ฅผ ์Œ์ˆ˜๊ฐ’๊ณผ ์–‘์ˆ˜๊ฐ’์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ด์œ ๋Š” ์ž…๋ ฅ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

// ์šฐ์„  ์œ„์น˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. [-39, -37, -29, -28, -6, 2, 11]
const locations = input[1].split(' ').map(Number).sort((a, b) => a - b);

๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ์˜ ํŽธ๋„ ์ฒ˜๋ฆฌ๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ , ์œ„์น˜ ์ˆœ์„œ๋Œ€๋กœ ๋‹ค๋…€์˜ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„์น˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ 2๊ถŒ์”ฉ ๋†“๊ณ  ์˜จ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, -6 ๋ถ€๋ถ„์—์„œ๋Š” 2๊ถŒ์„ ๊ฐ€์ ธ๋‹ค ๋†“์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฑ… ์œ„์น˜์ธ 2 ๋Š” ์–‘์ˆ˜๋กœ ๋ฐ”๋€Œ๋ฏ€๋กœ 0์„ ์ง€๋‚˜ 2๋ฅผ ์ƒˆ๋กœ ๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด ์œ„์น˜๋ฅผ ์Œ์ˆ˜๊ฐ’๊ณผ ์–‘์ˆ˜๊ฐ’์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ, ์Œ์ˆ˜๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ, ์–‘์ˆ˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ๊ฐ€์žฅ ๋จผ ๊ฑธ์Œ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

const locations = input[1].split(' ').map(Number);

// ์Œ์ˆ˜/์–‘์ˆ˜ ์œ„์น˜๋กœ ๋‚˜๋ˆ„๊ณ  ์ •๋ ฌ
const negativeBooks = locations.filter(x => x < 0).sort((a, b) => a - b);      // ์ž‘์€ ์ˆœ์„œ: [-39, -37, -29, -28, -6]
const positiveBooks = locations.filter(x => x > 0).sort((a, b) => b - a);      // ํฐ ์ˆœ์„œ: [11, 2]

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ๊ฐ๊ฐ์„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ฉด์„œ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ๋ถ€ํ„ฐ M๊ถŒ์”ฉ ๊ฐ€์ ธ๋‹ค ๋†“์œผ๋ฉฐ ๊ฑธ์Œ ์ˆ˜๋ฅผ ์„ธ์–ด์ค๋‹ˆ๋‹ค.(๊ทธ๋ฆฌ๋”” ์ „๋žต)

const distances = [];

// ๊ฐ ๋ฐฉํ–ฅ์—์„œ M๊ถŒ์”ฉ ๋ฌถ์–ด ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋งŒ ๊ธฐ๋ก
for (let i = 0; i < negativeBooks.length; i += M) {
  distances.push(Math.abs(negativeBooks[i]));
}
for (let i = 0; i < positiveBooks.length; i += M) {
  distances.push(positiveBooks[i]);
}

๊ฑธ์Œ ์ˆ˜์˜ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ๋งŒ ํŽธ๋„๋กœ ์ด๋™ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์™•๋ณต์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

const farthest = Math.max(...distances);
// ์ „๋ถ€ 2๋ฅผ ๊ณฑํ•ด์„œ ์™•๋ณต์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  max๊ฐ’์„ ๋นผ์„œ ํŽธ๋„๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
const totalDistance = distances.reduce((sum, d) => sum + d * 2, 0) - farthest;

refactor

๋‹ค ์ ๊ณ  ๋ณด๋‹ˆ ๊ฑฐ๋ฆฌ ๋ˆ„์ ์„ ๋”ฐ๋กœ ๊ณ„์‚ฐํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ๋ฐ”๋กœ ๊ณ„์‚ฐํ•˜๋„๋ก ๋ฆฌํŒฉํ† ๋งํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

let totalDistance = 0;
let farthest = 0;

for (let i = 0; i < negativeBooks.length; i += M) {
  const distance = Math.abs(negativeBooks[i]);
  totalDistance += distance * 2;
  // ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ“๊ฐ’๋„ ์ฐพ์Šต๋‹ˆ๋‹ค.
  if (distance > farthest) farthest = distance;
}

for (let i = 0; i < positiveBooks.length; i += M) {
  const distance = positiveBooks[i];
  totalDistance += distance * 2;
  // ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ“๊ฐ’๋„ ์ฐพ์Šต๋‹ˆ๋‹ค.
  if (distance > farthest) farthest = distance;
}

// ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ ๊ฐ’์€ ํŽธ๋„๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•œ ๋ฒˆ ๋บด์ค๋‹ˆ๋‹ค.
totalDistance -= farthest;

console.log(totalDistance);

์„ฑ๋Šฅ์ƒ ์ด์ ์€ ์—†์ง€๋งŒ, ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ์ข€ ๋” ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ์ฝ”๋“œ

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const [N, M] = input[0].split(' ').map(Number);
const locations = input[1].split(' ').map(Number);

const negativeBooks = locations.filter(x => x < 0).sort((a, b) => a - b);      // ์™ผ์ชฝ ์ฑ…: ์ž‘์€ ์ˆœ์„œ
const positiveBooks = locations.filter(x => x > 0).sort((a, b) => b - a);      // ์˜ค๋ฅธ์ชฝ ์ฑ…: ํฐ ์ˆœ์„œ

let totalDistance = 0;
let farthest = 0;

for (let i = 0; i < negativeBooks.length; i += M) {
  const distance = Math.abs(negativeBooks[i]);
  totalDistance += distance * 2;
  if (distance > farthest) farthest = distance;
}

for (let i = 0; i < positiveBooks.length; i += M) {
  const distance = positiveBooks[i];
  totalDistance += distance * 2;
  if (distance > farthest) farthest = distance;
}

totalDistance -= farthest;

console.log(totalDistance);
profile
๋ฐฑ ๋ฒˆ์„ ๋ณด๋ฉด ํ•œ ๊ฐ€์ง€๋Š” ์•ˆ๋‹ค ๐Ÿ‘€

0๊ฐœ์˜ ๋Œ“๊ธ€