✏️기록하는 즐거움
article thumbnail
반응형

Link

 

2480번: 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.  같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.  같은 눈이 2개

www.acmicpc.net

문제

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 
   
   1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 
   2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 
   3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.  

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다.
또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다.
3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.

입력 > 첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다. 
출력 > 첫째 줄에 게임의 상금을 출력 한다.

 

제출

const fs = require("fs");
const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `6 2 5`
)
  .split(" ")
  .map(Number)
  .sort((a, b) => a - b);

const [x, y, z] = stdin;

if (x === y && y === z) {
  console.log(10000 + x * 1000);
} else if (x === y || y === z) {
  console.log(1000 + y * 100);
} else {
  console.log(z * 100);
}

 

풀이과정

먼저, 입력 값을 sort()를 사용하여 오름차순으로 정렬한다.

그 다음 세 값이 모두 같을 때의 조건문과 두 개의 값만 같을 때의 조건문을 작성한다.

x === y || y === z 조건문에서 두 개의 값만 비교해줘도 괜찮은 이유는 앞에서 숫자를 오름차순으로 정렬해주었기 때문에 x와 z가 같으려면 x,y,z 세 개의 숫자가 같을 때 밖에 없다.

그리고 마지막으로는 가장 큰 값인 z에 *100을하여 출력한다.

 

개념

sort()

  • 배열의 요소를 정렬한 후 그 배열을 반환한다. (복사본이 아님에 주의)
  • 매개변수에 compareFunction을 생략하면 배열 요소의 문자열 변환에 따른 유니 코드 값에 따라 정렬된다.
 

Array.prototype.sort() - JavaScript | MDN

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

developer.mozilla.org

 

 

const fruits = ['바나나', '사과', '수박' , '딸기'];
fruits.sort();
console.log(fruits); // [ '딸기', '바나나', '사과', '수박' ]

const numbers = [1, 23, 12, 5, 46];
numbers.sort();
console.log(numbers); // [ 1, 12, 23, 46, 5 ]

 

메소드의 매개변수가 없는 경우, 문자열로 변환하고 문자의 유니 코드 순서에 따라서 정렬된다.

따라서 숫자를 오름차순으로 정렬하기 위해서는 compare 함수를 사용해주어야한다.

 

비교값이 a와 b라고 할 때, compareFunction이 반환하는 값에 따라 정렬 결과가 달라진다.

function compare(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

반환값이 0보다 작은 경우, a가 b보다 앞에 정렬된다.

반환값이 0일 경우, a와 b의 순서는 변경되지 않는다.

반환값이 0보다 클 경우, b가 a보다 앞에 정렬된다.

 

숫자를 비교할 떄 아래와 같은 compareFunction을 사용할 수 있다.

const numbers = [1, 23, 12, 5, 46];
numbers.sort(function (a, b) {
  return a - b;
});
console.log(numbers); // [ 1, 5, 12, 23, 46 ]

 

Arrow Function을 사용하면 더 간략한 코드가 된다.

numbers.sort((a, b) => a - b);

 

 


Comment

반응형
profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!