[백준] 14655 욱제는 도박쟁이야!! JavaScript

·2024년 5월 13일

문제

욱제는 라스베이거스에서 유명한 베팅꾼이다. 어찌나 게임을 잘 하는지 ‘제2의 홍진호’라는 별명이 붙었을 정도다. 어찌나 게임을 잘 하는지 ‘제2의 홍진호’라는 별명이 붙었을 정도다.

욱제가 주로 하는 게임은 아주 단순하고, 친숙한 게임이다. 바로 동전 뒤집기 게임이다. 이 게임에 쓰이는 동전의 양면에는 절댓값이 같고 부호가 다른 정수가 한 면에 하나씩 쓰여 있다. (단, 동전끼리는 쓰인 수의 절댓값이 다를 수 있다) 한 플레이어 당 두 번의 라운드가 주어진다. 모든 라운드는 같은 동전으로 진행되며, 딜러는 각 라운드마다 N개의 동전을 임의로 섞고 이를 일렬로 배열한다. 이때, 동전의 앞뒤 방향도 바뀔 수 있다. 첫 번째 라운드에서는 동전에 표시된 값들의 합이 최대가 되도록 뒤집어야 하고, 두 번째 라운드에서는 동전에 표시된 값들의 합이 최소가 되도록 뒤집어야 한다. (첫 번째 라운드 동전 값의 합) - (두 번째 라운드 동전 값의 합)이 해당 플레이어가 게임에서 획득한 점수이고, 이 점수가 최대가 되는 플레이어가 바로 게임의 승자가 된다.

욱제는 엄지, 검지, 중지를 이용해서 항상 연속한 3개의 동전을 뒤집는 최고의 동전 뒤집러이다. 욱제는 연속한 3개의 동전을 뒤집지 않으면 이길 수 없다고 생각하기 때문에 실패하는 경우 없이 항상 연속한 3개의 동전만 뒤집는다. 동전 배열의 양 끝에서 벗어나서 양 끝의 동전만 뒤집거나 양 끝의 두 개 동전만 뒤집는 것도 가능하다. 동전을 뒤집는 횟수에 제한은 없다.

(!) 너, 강해 보이는군. 나와 승부를 겨루자! 띠리링띠리링디리ㅣ리리ㅣ링~ 앗! 심술쟁이 해커 임준오(동탄 주민)이 승부를 걸어왔다!

욱제는 이번 게임에서 얼마의 점수를 획득하게 될까? 욱제는 최고의 베팅꾼이기 때문에 항상 게임에서 획득할 수 있는 최고의 점수를 얻는다는 사실은 자명하다.

입력

첫째 줄에 동전의 수 N이 주어진다. (1 ≤ N ≤ 10,000) 둘째 줄에 욱제의 첫 번째 라운드의 N개 동전의 배열이 주어진다. 셋째 줄에 욱제의 두 번째 라운드의 N개 동전의 배열이 주어진다. 동전에 적히는 수는 절댓값 10,000 이하의 정수이다.

출력

욱제가 이번 게임에서 획득할 점수를 출력한다.

예제 입력

6
5 -2 -7 -8 9 1
-9 1 8 -7 5 2

예제 출력

64

내가 했던 풀이 방법

  1. 첫 번째 라운드와 두 번째 라운드의 동전의 배열을 각각 rounds[0]과 rounds[1]에 저장한다.
  2. min_sum과 max_sum을 0으로 초기화한다. max_sum은 첫 번째 라운드에서의 점수이고, 최고의 점수를 얻게 되므로 첫 번째 라운드에서는 최대의 값을 가져야 한다. min_sum은 두 번째 라운드에서의 점수이고, 최고의 점수를 얻기 위해 두 번째 라운드에서는 최소의 값을 가져야 한다.
  3. 모든 동전의 배열을 첫 번째 라운드에서는 절댓값을 합한 값을 max_sum에 저장하고, 두 번째 라운드에서는 절댓값에 ×(-1)을 한 값을 모두 합한 값을 min_sum에 저장한다.
  4. 게임에서 획득한 점수 (max_sum-min_sum)을 출력한다.

코드

const fs = require('fs');
let [N, ...rounds] = fs.readFileSync(0, 'utf-8').toString().trim().split('\n');

rounds[0] = rounds[0].trim().split(' ').map(Number);
rounds[1] = rounds[1].trim().split(' ').map(Number);

let min_sum = 0;
let max_sum = 0;
for (let i = 0; i < Number(N); i++) {
  max_sum += Math.abs(rounds[0][i]);
  min_sum += Math.abs(rounds[1][i]) * -1;
}

console.log(max_sum - min_sum);

회고

"동전 배열의 양 끝에서 벗어나서 양 끝의 동전만 뒤집거나 양 끝의 두 개 동전만 뒤집는 것도 가능하다. 동전을 뒤집는 횟수에 제한은 없다."라는 점에서 모든 동전을 제약없이 다룰 수 있다는 점을 깨닳았다. 즉 동시에 3개의 동전이 뒤집힌다고 해도, 횟수에 제한이 없고 양 끝에서는 1개 혹은 2개의 동전만 뒤집는 것도 가능하므로 그냥 앞에서부터 동전이 음수이면 연속된 동전 3개를 뒤집어서 첫 번째 동전을 양수로 만들고 두 번째 동전이 음수이면 연속된 동전 3개를 뒤집어서 두 번째 동전을 양수로 만들고.. 이를 쭉 반복하면 결국 동전 하나를 뒤집는 것과 다를 게 없다.

profile
Frontend🍓

0개의 댓글