이 문제는 크게 어렵지 않은 문제입니다. for문을 돌려서 주사위를 굴려서 나온 값들 중 높은 값으로 그 반대편 사람의 점수를 깎는 문제인데요.
문제는 제가 백준 문제를 일전에 자바로 풀어오다가 좀 놔두고 프로그래머스로 자바스크립트로 풀기 시작했다가 다시 백준으로 돌아와보니 양식이 달라서 한참을 해맸습니다 ㅎㅎ...
그래서 기왕 백준 문제를 풀 겸 입력을 어떻게 받아야 하는지를 연습해보는 차원에서 해당 문제를 풀게 되었습니다.
const fs = require('fs'); // 파일을 읽어오기 위한 fs 모듈을 불러옵니다. const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n'); // readFileSync 메서드를 사용해 해당 경로의 파일을 불러온 후 문자화 시켲주고, 양쪽 공백을 자른 후 split메서드로 공백을 기준으로 잘라 배열로 반환합니다. const n = parseInt(input[0]); // input 배열의 첫번째(입력값)을 parseInt로 정수화 시켜 n에 할당합니다. const arr = input.slice(1).map(line => line.split(' ').map(Number)); // arr 변수에는 input을 slice로 1번째 인덱스부터 끝까지(주사위 값들이 들어있는 배열들) 잘라 반환 후 map 메서드를 이용해 배열들 마다 공백을 기준으로 다시 나눈 후 또 map 메서드로 각 요소들을 Number로 타입을 변환한 최종값을 arr에 반환합니다. // 예를 들어 input에 [ ['3'], ['1 3'], ['6 5'], ['3 3'] ] 이렇게 들어있다면 input.slice(1)은 [['1 3'], ['6 5'], ['3 3']] 이렇게 될것이고, 여기서 map을 이용해 라인(배열)마다 스플릿을 해주면 [['1', '3'] ['6', '5'], ['3', '3']] 이렇게 반환 될텐데 그 값에 또 map으로 각 요소들을 또 Number 타입으로 반환해 주면 최종적으로 [ [1, 3], [6, 5], [3, 3] ]가 반환될 것입니다. let man1 = 100; let man2 = 100; // 점수 설정 for (let i = 0; i < n; i++) { const [man1Dice, man2Dice] = arr[i]; // 구조 분해 할당으로 남자1과 2의 주사위 값을 arr의 i번째 배열의 값들로 할당 man1 -= man1Dice < man2Dice ? man2Dice : 0; man2 -= man1Dice > man2Dice ? man1Dice : 0; // 3항 연산자를 이용해 각각 man1과 2에 연산 처리 } console.log(man1 + '\n' + man2); // 출력 할때에도 오랜만이라 어떻게 하는지 까먹었는데 백틱을 이용해서 console.log(`${man1}\n${man2}`); 이런 식으로 써도 됩니다.