【TypeScript】 AtCoder abc121_c

atcoder.jp

C問題としては簡単な部類だと思う。

安い店から計算していき、合計本数に到達したらbreakする。

テストコード

import { main } from './main'

describe('tests', () => {
  test('1', () => {
    expect(main(2, 5, [[4, 9], [2, 4]])).toEqual(12)
  })

  test('2', () => {
    expect(main(4, 30, [[6, 18], [2, 5], [3, 10], [7, 9]])).toEqual(130)
  })
})

提出コード (AC)

export const main = (
  N: number,
  M: number,
  abList: Array<Array<number>>
): number => {
  abList.sort((x, y) => {
    if (x[0] < y[0]) return -1
    if (x[0] > y[0]) return 1
    return 0
  })

  let res = 0
  let remain = M
  for (let i = 0; i < N; i++) {
    const [a, b] = abList[i]
    if (b < remain) {
      res += a * b
      remain -= b
    } else {
      res += a * remain
      break
    }
  }

  return res
}

const input: string = require('fs').readFileSync('/dev/stdin', 'UTF-8')
const lines = input.split('\n')

const [N, M] = lines[0].split(' ').map(item => Number(item))

const abList: Array<Array<number>> = []
for (let i = 0; i < N; i++) {
  abList.push(lines[i + 1].split(' ').map(l => Number(l)))
}

const res = main(N, M, abList)
console.log(res)

トランスパイル後の下記で提出。

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.main = function (N, M, abList) {
    abList.sort(function (x, y) {
        if (x[0] < y[0])
            return -1;
        if (x[0] > y[0])
            return 1;
        return 0;
    });
    var res = 0;
    var remain = M;
    for (var i = 0; i < N; i++) {
        var _a = abList[i], a = _a[0], b = _a[1];
        if (b < remain) {
            res += a * b;
            remain -= b;
        }
        else {
            res += a * remain;
            break;
        }
    }
    return res;
};
var input = require('fs').readFileSync('/dev/stdin', 'UTF-8');
var lines = input.split('\n');
var _a = lines[0].split(' ').map(function (item) { return Number(item); }), N = _a[0], M = _a[1];
var abList = [];
for (var i = 0; i < N; i++) {
    abList.push(lines[i + 1].split(' ').map(function (l) { return Number(l); }));
}
var res = exports.main(N, M, abList);
console.log(res);