[코테] HackerRank Permuting Two Arrays

Dongmin Lee·2023년 5월 22일
0

코테

목록 보기
12/23

💿 문제

💾 문제 요약

자연수 k와 길이가 같은 배열 A,B를 입력 받을 때
입력받은 배열의 순열 중 같은 인덱스의 합이 항상 k보다 큰 조합이 있는가?

💿 풀이

문제 이해부터 어려워서 sample을 여러 차례 정독했다.

가장 핵심은 항상 k보다 큰 이었다. 앞에서 큰 수를 다 뽑아버리면 남은 요소들은 작은 수끼리의 합일 수 밖에 없다. 따라서 조건을 만족시키기 위해서는 전체적으로 최소값을 최대화하여야 하고, 이를 구현하기 위해선 A에서 가장 큰 수 + B에서 가장 작은 수 / A에서 두번째로 큰 수 + B에서 두번째로 작은 수 ... 식으로 매칭시켜야 한다.

따라서 sort 메서드를 통해 하나는 내림차순, 하나는 오름차순으로 정렬한 다음 for문으로 같은 인덱스끼리 더해줘 하나라도 k보다 작으면 NO를 리턴시킨다.

💾 풀이 코드

'use strict';

const fs = require('fs');

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', function(inputStdin) {
    inputString += inputStdin;
});

process.stdin.on('end', function() {
    inputString = inputString.split('\n');

    main();
});

function readLine() {
    return inputString[currentLine++];
}

/*
 * Complete the 'twoArrays' function below.
 *
 * The function is expected to return a STRING.
 * The function accepts following parameters:
 *  1. INTEGER k
 *  2. INTEGER_ARRAY A
 *  3. INTEGER_ARRAY B
 */

function twoArrays(k, A, B) {
    A.sort((a, b) => a - b);
    B.sort((a, b) => b - a);
    
    for(let i = 0; i < A.length; i++) {
        if (A[i] + B[i] < k) {
            return "NO";
        }
    }
    
    return "YES";
}

function main() {
    const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

    const q = parseInt(readLine().trim(), 10);

    for (let qItr = 0; qItr < q; qItr++) {
        const firstMultipleInput = readLine().replace(/\s+$/g, '').split(' ');

        const n = parseInt(firstMultipleInput[0], 10);

        const k = parseInt(firstMultipleInput[1], 10);

        const A = readLine().replace(/\s+$/g, '').split(' ').map(ATemp => parseInt(ATemp, 10));

        const B = readLine().replace(/\s+$/g, '').split(' ').map(BTemp => parseInt(BTemp, 10));

        const result = twoArrays(k, A, B);

        ws.write(result + '\n');
    }

    ws.end();
}

💿 리마인더

오름차순(ASC,Ascending) -> sort((a,b) => a-b)
내림차순(DESC, Descending) -> sort((a,b) => b-a)

profile
어제보다 성장하기

0개의 댓글