[백준 10103번 문제] 주사위 게임 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2024년 1월 4일
0

코딩테스트연습

목록 보기
68/106
post-thumbnail

1. 문제

2. 입력

3. 출력

4. 입출력 예

5. 힌트

6. 첫번째 문제 풀이(2024-01-04)

이 문제는 크게 어렵지 않은 문제입니다. 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}`); 이런 식으로 써도 됩니다.   
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글