1차원 배열


10818번 (최소, 최대)

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');
const numbers = input[1].split(' ').map(Number);
console.log(Math.min(...numbers)+' '+Math.max(...numbers));
  • split를 이용해 배열에 숫자들을 담고 Math.min과 Math.max를 이용해서 최솟값과 최댓값을 리턴받았다.
  • 2562번 (최댓값)

    const fs = require("fs");
    const input =
    fs.readFileSync("./input.txt").toString().trim().split('\n').map(Number);
    let num = 0;
    for (let i = 0; i < input.length; i++) {
    if (num < input[i]) {
    num = input[i];
    }
    }
    const index = input.indexOf(num)+1;
    console.log(num+"\n"+index);
  • 이번에는 Math.max를 이용하지 않고 반복문을 통해 가장 큰 숫자를 찾아보았다.
  • 가장 큰 숫자를 찾은 후에 배열에 indexOf를 이용하여 해당 숫자의 인덱스를 알아낸 후, 1을 더해주었다.
  • 3052번 (나머지)

    const fs = require("fs");
    const input =
    fs.readFileSync("./input.txt").toString().trim().split('\n').map(Number);
    const remainder = input.map(x => x % 42);
    const setRemainder = [...new Set(remainder)];
    console.log(setRemainder.length);
  • map()을 이용하여 배열로 받은 input의 요소들에 42로 나눈 나머지를 구해주었다.
  • 42로 나눈 나머지들로 구성된 배열의 중복을 Set()을 이용하여 제거했다.
  • 중복을 제거한 배열의 길이를 출력했다.
  • 1546번 (평균)

    const fs = require("fs");
    const input = fs.readFileSync("./input.txt").toString().trim().split('\n');
    const subjectNum = parseInt(input[0]);
    const score = input[1].split(' ').map(Number);
    const maxScore = Math.max(...score);
    let sumScore = 0;
    for (let i = 0; i < subjectNum; i++) {
    sumScore += (score[i] / maxScore) * 100
    }
    console.log(sumScore / subjectNum);
  • 과목의 개수, 점수들의 배열, 가장 높은 점수 등을 먼저 변수로 만들어주었다.
  • for문을 이용하여 문제에서 말한 계산법대로 계산한 후 각 값을 sumScore 변수에 더해주었다.
  • sumScore를 과목 개수로 나누어 주었다.
  • 8958번 (OX퀴즈)

    const fs = require("fs");
    const input = fs.readFileSync("./input.txt").toString().trim().split('\n');
    const num = parseInt(input[0]);
    for (let i = 1; i <= num; i++) { // 첫번째 for문
    let count = 0;
    let score = 0;
    for (let j = 0; j < input[i].length; j++) { // 두번째 for문
    if (input[i][j] === 'O') {
    count++;
    score += count;
    } else {
    count = 0;
    }
    }
    console.log(score);
    }
  • for문을 중첩해서 사용했다.
  • 첫번째 for문은 input[i]의 i를 1씩 증가시키는 용도이다.
  • 그 밑의 for문에서는 input[i][j]로 인덱스를 2번 사용하여 해당 OX의 첫번째 문자열부터 마지막 문자열까지 탐색할 수 있도록 하였다.
  • 만약 문자열 O가 나오면 count를 1증가시켜주고 X가 나오면 카운트는 0으로 돌아가도록 하였다.
  • 또한 이 count값을 score에 더해주었다.
  • 처음엔 for문 아예 밖에 count와 score변수를 두었는데 이 경우 첫번째 for문이 한번 돌고나서도 count값과 score값이 0으로 초기화 되지 않아 누적된 계산값을 얻었다. 따라서 첫번째 for문 안에 해당 변수들을 두어 다시 0으로 돌아갈 수 있게 하였다.
  • 4344번 (평균은 넘겠지)

    const fs = require("fs");
    const input = fs.readFileSync("./input.txt").toString().trim().split('\n');
    for (let i = 1; i <= input[0]; i++) {
    let caseArr = input[i].trim().split(' ').map(Number);
    let sumScore = 0;
    let highStudent = 0;
    for (let j = 1; j <= caseArr[0]; j++) { // 첫번째 for문
    sumScore += caseArr[j]
    }
    for (let k = 1; k <= caseArr[0]; k++) { // 두번째 for문
    if (caseArr[k] > (sumScore / caseArr[0])) {
    highStudent++;
    }
    }
    let percentage = (highStudent / caseArr[0]) * 100
    console.log(percentage.toFixed(3) + "%")
    }
  • for문 안에 for문을 2개 사용했다.
  • sumScore라는 변수와 highStudent라는 변수를 만들어서 점수의 합과 평균을 넘을 학생 수를 담았다.
  • 첫번째 for문에는 sumScore에 모든 점수를 더해주었다.
  • 두번째 for문에는 평균을 넘는 학생이 있을 때마다 highStudent에 1씩 더해주었다.
  • percentage라는 변수에 평균을 넘는 학생의 비율을 백분율로 넣어주었다.
  • toFixed()를 이용해 소수점을 3자리로 제한하고 반올림해주었다.
  • 1065번 (한수)

    const fs = require("fs");
    const input = parseInt(fs.readFileSync("./input.txt").toString().trim());
    // ex) 110
    const inputArr = input.toString().split('').map(Number);
    // ex) [1, 1, 0]
    let count = 0;
    function equal(inputArr) {
    if (inputArr.length < 3) {
    console.log(input);
    } else if (inputArr.length >= 3) {
    for (let i = 100; i <= input; i++) {
    let arr2 = i.toString().split('').map(Number);
    if ((arr2[0] - arr2[1]) === (arr2[1] - arr2[2])) {
    count++;
    }
    }
    console.log(count+99);
    }
    }
    equal(inputArr);
  • 우선 input에는 숫자로 된 인풋을 받아주고 inputArr에는 배열로 쪼개어 인풋을 받은 후 숫자로 바꿔주었다.
  • 함수를 굳이 이용하지 않아도 될 것 같지만 함수에 속한 문제라서 함수로 만들어 보았다.
  • 만약 inputArr의 length가 3보다 작으면 한자리수 또는 두자리수 숫자인 것이고 이 경우 1~99까지의 모든 수가 한수이기 때문에 input 그 자체를 출력한다.
  • 만약 inputArr의 length가 3이상이면 100부터 시작하는 for문을 돌려 i를 배열로 쪼개주고 배열의 인덱스 0과 1의 값의 차이가 인덱스 1과 2의 값의 차이와 같으면 (한수이면) count를 1 증가시켰다.
  • 이 경우 count에 99를 더하여 출력하였다.