Algorithm

221115 :: [프로그래머스] 두 개 뽑아서 더하기, 모의고사, 가장 큰 정사각형 찾기

kohi ☕ 2022. 11. 15. 23:59

두 개 뽑아서 더하기

문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

 

나의 답안

function solution(numbers) {
    let arr = [];
    for (let i = 0; i < numbers.length; i++) {
        for (let j = 0; j < numbers.length; j++) {
            if (i !== j) arr.push(numbers[i] + numbers[j]);
        }
    }
    arr.sort(function (a, b) {
        return a - b;
    });
    const set = new Set(arr);
    return [...set];
}
  • for문을 돌면서 배열의 모든 값을 더한 값을 배열 arr에 push => i와 j가 같지 않을 때
  • 배열을 정렬하고 set으로 중복 제거, 다시 배열로 반환

 

모의고사

문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

제한 조건

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

 

나의 답안

function solution(answers) {
    const first = [1, 2, 3, 4, 5];
    const second = [2, 1, 2, 3, 2, 4, 2, 5];
    const third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    const countArr = [0, 0, 0];
    const result = [];

    for (let i = 0; i < answers.length; i++) {
        if (answers[i] === first[i % first.length]) countArr[0]++;
        if (answers[i] === second[i % second.length]) countArr[1]++;
        if (answers[i] === third[i % third.length]) countArr[2]++;
    }

    for (let i = 0; i < countArr.length; i++) {
        if (Math.max.apply(null, countArr) === countArr[i]) {
            result.push(i + 1);
        }
    }
    return result;
}
  • 수포자들의 찍기 패턴과 답안을 비교해서 정답 갯수만큼 카운트하고 countArr 배열에 차례대로 추가
  • countArr의 최댓값과 countArr[i]가 같으면 인덱스 + 1 push하고 반환 => countArr[0] == 수포자 1

 

가장 큰 정사각형 찾기

문제 설명

1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)

예를 들어

1 2 3 4
0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

가 있다면 가장 큰 정사각형은

1 2 3 4
0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다.

 

제한사항

  • 표(board)는 2차원 배열로 주어집니다.
  • 표(board)의 행(row)의 크기 : 1,000 이하의 자연수
  • 표(board)의 열(column)의 크기 : 1,000 이하의 자연수
  • 표(board)의 값은 1또는 0으로만 이루어져 있습니다.

 

나의 답안

function solution(board) {
    let result = 0;
    for (let i = 0; i < board.length; i++) {
        for (let j = 0; j < board[0].length; j++) {
            if (board[i][j] >= 1 && !(board[i - 1] === undefined || board[i][j - 1] === undefined)) board[i][j] = Math.min(board[i - 1][j], board[i - 1][j - 1], board[i][j - 1]) + 1;
            result = Math.max(result, board[i][j]);
        }
    }
    return result ** 2;
}
 

[프로그래머스] 가장 큰 정사각형 찾기 | JavaScript

가장 큰 정사각형 찾기 문제 설명 1과 0으로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return하는 solution

onlydev.tistory.com