Skip to content
On this page

배열 탐색 문제

수정하기
문서 생성 2021-04-27 13:45:05 최근 수정 2021-04-27 13:45:17

문제 1

  • 배열을 입력받고 바로 앞의 수보다 큰 수만 출력하기
  • 첫번째는 무조건 출력

풀이 1

function solution(numbers) {
let answer = [];
answer.push(numbers[0]);
for(let x in numbers) {
if(numbers[x-1] < numbers[x]) {
answer.push(numbers[x]);
}
}
return answer;
}
let array = [1, 9, 3, 7, 11, 2];
console.log(solution(array)); // [1, 9, 7, 11]

문제 2

  • 사람의 키 배열이 주어졌을 때, 앞 사람보다 키가 큰 사람의 수를 출력

풀이 2

function solution(arr){
let answer = 1;
let maxHeight = arr[0];
for (let x in arr) {
if(maxHeight < arr[x]) {
answer++;
maxHeight = arr[x];
}
}
return answer;
}
let people = [120, 165, 165, 155, 182, 170, 155, 169];
console.log(solution(people)); // 3

문제 3

  • 가위바위보 대결을 한다. 가위바위보 대결 횟수 N과, A가 낸 가위바위보 정보 N개의 배열, B가 낸 가위바위보의 정보 N개의 배열이 주어진 뒤 승자(A or B)를 출력하고 비기면 D를 출력
  • 1은 가위, 2는 바위, 3은 보

풀이 3

function solution(game, arr1, arr2) {
let answer = [];
for(let i = 0; i < game; i++) {
let a = arr1[i];
let b = arr2[i];
if(a === b) {
answer.push('D');
} else {
switch (a) {
case 1:
if (b === 2) answer.push('B');
else answer.push('A');
break;
case 2:
if (b === 3) answer.push('B');
else answer.push('A');
break;
case 3:
if (b === 1) answer.push('B');
else answer.push('A');
break;
}
}
}
return answer;
}
let person1 = [2, 3, 3, 1, 3];
let person2 = [1, 1, 2, 2, 3];
console.log(solution(5, person1, person2)); // ["A", "B", "A", "B", "D"]

문제 4

  • 입력 배열로 채점 결과가 주어진다. 배열 값의 0은 답이 틀린 것, 1은 답이 맞은 경우이다. 처음 맞은 문제는 1점 K번 연속으로 맞은 문제는 K점이다. 틀린 문제는 0점이다. 총점을 출력하라.

풀이 4

function solution() {
let answer = 0;
let add = 0;
for(let x of score) {
if(x === 1) {
add++;
answer += add;
} else {
add = 0;
}
}
return answer;
}
let score = [1, 0, 1, 1, 1, 0, 0, 1, 1, 0]; // 10
console.log(solution(score));

문제 5

  • 점수 배열이 입력되면 해당 점수의 등수를 배열로 출력한다.
  • 같은 점수가 입력되면 높은 등수로 동일 처리, 90점이 1등인 경우에 3명이 존재하면 그 다음 점수는 4등이 되는 것

풀이 5

function solution(arr) {
let n = arr.length;
let answer = Array.from({length:n}, () => 1);
for(let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if(arr[j] > arr[i]) answer[i]++;
}
}
return answer;
}
let scores = [87, 89, 92, 100, 76, 100];
console.log(solution(scores));
  • 계속 풀어보려고 시도했는데 매우 간단한 문제였다. 최대값을 구할 필요 없이 각자 서로 비교해 적은 쪽에 1을 더해주면 되는 문제였다. 등수가 밀리니깐

문제 6

풀이 6

function solution(arr) {
let answer = Number.MIN_SAFE_INTEGER;
let n = arr.length;
let sumRow, sumCol = 0;
for(let i = 0; i < n; i++) {
sumRow = sumCol = 0;
for(let j = 0; j < n; j++) {
sumRow += arr[i][j];
sumCol += arr[j][i];
}
answer = Math.max(answer, sumRow, sumCol);
}
sumRow = sumCol = 0;
for(let i = 0; i < n; i++) {
sumRow += arr[i][i];
sumCol += arr[i][n-i-1];
}
answer = Math.max(answer, sumRow, sumCol);
return answer;
}
let array = [
[10, 13, 10, 12, 15],
[12, 39, 30, 23, 11],
[11, 25, 50, 53, 15],
[19, 27, 29, 37, 27],
[19, 13, 30, 13, 19]
]
console.log(solution(array)); // 155

문제 7

풀이 7

function solution(arr) {
let answer = 0;
let n = arr.length;
for(let i = 0; i < n; i++) {
for(let j = 0; j < n; j++) {
let left = j-1 < 0 ? 0 : arr[i][j-1];
let right = j + 1 >= n ? 0 : arr[i][j+1];
let top = i-1 < 0 ? 0 : arr[i-1][j];
let bottom = i + 1 >= n ? 0 : arr[i+1][j];
if(arr[i][j] > Math.max(left, right, top, bottom)){
answer++;
}
}
}
return answer;
}
let array = [
[5, 3, 7, 2, 3],
[3, 7, 1, 6, 1],
[7, 2, 5, 3, 4],
[4, 3, 6, 4, 1],
[8, 7, 3, 5, 2]
]
console.log(solution(array));