1. 문제

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.

 

입력설명 |

첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.

문자열의 길이는 100을 넘지 않는다.

입력예제 | teachermode e

출력예제 | 1 0 1 2 1 0 1 2 2 1 0

 

*만약 문제를 읽고도 이해가 안가면, 입력예제와 출력예제를 보면서 어떻게 나오는건지 유추하는 것도 문제해결능력이다. 

 

 

 

2. 접근방법

문자열 앞에서부터 탐색, 뒤에서부터 탐색 비교해서 최소값으로 변경해주기

 

반목문으로 문자열 하나씩 돌면서 탐색

e가 아닐 경우 카운팅하면서 증가시킨다. 

반대로 마지막 인덱스부터 문자열 하나씩 돌면서 탐색

e가 아닐 경우 카운팅하면서 증가시킨다. 

그리고 비교해서 최소값으로 변경해준다. 

 

 

3. 문제풀이

e에서부터의 가장 짧은 거리를 리턴해야한다. 

answer를 배열로 넣고, 값을 배열에 push하기로 한다.

최대문자열의 길이 100이므로 변수 p를 최대값 100으로 작성해주기로 한다.

 

1. 문자 e에서 우측방향으로의 거리 구하기

for of 반복문을 사용해서 문자열을 돌면서 문자가 e가 아니면 p++을 해준다.

e이면 0으로 초기화한다. 

이 방법은 문자 e에서 우측방향으로의 거리를 구한 것이다.

 

2. 문자 e에서 좌측방향으로의 거리 구하고 비교

다시 반복문으로 문자열을 반대로 돈다. 

반대로 돌면서 e에서 좌측방향으로의 거리를 구한다. 

즉, 좌측이든 우측이든 둘중에서 가장 더 작은 수를 리턴하도록 한다. 

 

function solution(str, e){
	let answer = [];
    let p = 100; // 문자열의 길이는 100을 넘지 않으므로 최대값 100으로 설정해준다. 
    for(x of str){
    	if(x === e){
        	p=0; // p를 0으로 초기화해준다
            answer.push(p);
        } else {
        	p++;
            answer.push(p);
        }
    }
    p = 100; // 반복문을 다시 시작하기 전에 변수 p 원래대로 초기화
    for(let i = str.length-1; i>=0; i--){
    	if(str[i] ===e){
        	p=0;
        } else {
        	p++;
            answer[i] = Math.min(answer[i], p);
            // 첫번째 반복문을 통해 들어있는 p와 현재 answer[i]를 비교해서 작은 값으로 바꿔준다.
        }
     }
     return answer;
}

let str = "teachermode";
console.log(solution(str, 'e');

 

 

 

4. 사용개념

Math.min()

Math.min([value1[, value2[, )

여기서 value는 숫자형이어야한다. 1개 이상의 인자값이 숫자형으로 변환이 불가능한 경우 NaN 반환

문자열에서 숫자만 걸러내서 추출하기. 문자열 속의 숫자를 숫자로 바꿔줘야한다. 

 

문제

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다. 만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다. 추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

 

입력예제 | g0en2T0s8eSoft

출력예제 | 208

 

 

접근

문자열 안에서 기호는 제외하고 문자만 검사하여 팰린드롬 문제를 해결했던 것 처럼

정규표현식을 사용해서 숫자만 걸러준다. 그리고 문자열을 숫자로 변환해준다. 

 

풀이(1)

replace(/[^0-9]/g, ' ') -> 전체 영역에서 0-9까지가 아닌걸 찾아라.

그리고 문자열을 숫자로 변환하는 함수 parseInt()를 사용해서 answer를 리턴한다. 

문자열을 숫자로 바꿔줘야하기 때문에 parseInt()를 사용해야한다. 

function solution(str){
            let answer;
            str = str.replace(/[^0-9]/g, '');
            answer = parseInt(str);
            return answer;
        }

let str = "g0en2T0s8eSoft";
console.log(solution(str));

 

풀이(2)

isNaN(value) -> 숫자인가 아닌가? 를 확인해서 누적하는 방법

function solution(str){
	let answer = "";
    for(let x of str){
    	if(!isNaN(x)) answer+=x;
    }
    return parseInt(answer);
}

let str = "g0en2T0s8eSoft";
console.log(solution(str));

 

 

사용한 개념

isNaN()

숫자인지 아닌지 확인하기

isNaN(value)

숫자가 아닐경우 true 리턴, 숫자일 경우 false 리턴한다. 

 

parseInt()

문자열을 숫자로 변환하기 

parseInt(string)

string - 숫자로 변환할 문자열

회문 문자열 = 팰린드롬

회문 문자열(팰린드롬) : 앞에서부터 읽으나 뒤에서부터 읽으나 같은 문자열.

 

문자열 탐색하는 문제. 문자열에 어떠한 조건을 주고 탐색하는 문제였습니다.

 

1. 문제

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다. 문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요. 단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자 구분하지 않습니다. 알파벳 이외의 문자는 무시합니다. 

 

입력예제 | found7, time: study; Yduts; emit, 7 Dnuof

출력예제 | YES

 

 

2. 접근방법

회문 문자열을 풀었던 방법과 같다.

회문 문자열은 문자열 안에서 제일 앞과 제일 끝이 같다는 말이고,

앞에서부터 한글자와 뒤에서 부터 한글자를 비교해야한다. 

알파벳만 가지고 회문 검사를 해야하므로 문자열에 문자열이 아닌 요소를 제거하는 코드를 추가해준다. 

 

 

2. 문제 풀이

1. 대소문자 구분하지 않으므로 처음부터 소문자 or 대문자로 통일시킨다.

2. 정규표현식을 사용해서 문자열 내에 알파벳을 제외하고 나머지를 제거한다. 

2. for 반복문으로 문자열을 돌면서 앞에서부터 문자와 뒤에서부터 문자 짝지어서 비교해준다. 

function solution(str){
	let answer = "YES";
    str = str.toLowerCase().replace(/[^a-z]/g, '');
    // 처음부터 소문자나 대문자로 통일시킨다.
    // 소문자로 통일하고 여기다가 replace를 해서 소문자만 두고 나머지 제거 -> 정규표현식 사용
	// 정규표현식에서 ^ 표시 -> 부정 
	// [^a-z/g] -> 소문자 a-z까지 아닌걸 찾아라 global -> 전체 영역에서
    let len = str.length;
    for(let i=0; i<len; i++){
    	if(str[i] !== str[len-i-1]) return "NO";
    }
    return answer;
}

let str = "found7, time: study; Yduts; emit, 7Dnuof";
console.log(solution(str));
function solution(str){
	let answer = "YES";
    str = str.toLowerCase().replace(/[^a-z]/g, '');
    let len = str.length;
    for(let i=0; i<len; i++){
    	if(str !== str.split('').reverse('').join('')) return "NO";
    }
    return answer;
}

let str = "found7, time: study; Yduts; emit, 7Dnuof";
console.log(solution(str));

 

3. 사용개념

 

정규표현식

정규식을 만드는 방법 1. 정규식 리터럴사용 (슬래시 / 로 감싸는 패턴)

정규식을 만드는 방법 2. RegExp 객체의 생성자 함수를 호출하는 방법

문자열 탐색하는 문제인데, 어떻게 탐색해서 비교할건지 생각해보는 문제였습니다. 

 

1. 문제

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 한다. 문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요. 단 회문을 검사할 때 대소문자를 구분하지 않습니다.

 

입력예제 | gooG

출력예제 | YES

 

 

2. 접근방법 

(1) 방법

회문 문자열은 문자열 안에서 제일 앞과 제일 끝이 같다는 말이고,

앞에서부터 한글자와 뒤에서 부터 한글자를 비교해야한다. 

문자열 내에서 2개씩 짝을 지어 비교하게되니 length/2로 범위를 정해 반복한다. 

 

(2) 방법

메소드를 사용해서 문자열을 반대로 뒤집어서 원래 문자열과 비교한다. 

 

3. 문제풀이(1) 

1. 대소문자 구분하지 않으므로 처음부터 소문자 o r대문자로 통일시킨다. 

2. for반복문으로 문자열을 돈다.

3. 앞에서부터 문자와 뒤에서부터 문자 짝을지어서 확인하므로

length/2로 나눈 횟수를 적어준다.

4. 조건 앞에서부터 글자와 뒤에서 부터 글자 비교해서 다르면 NO 같으면 YES 리턴한다. 

 

function solution(str){
	let answer = "YES";
    str =  str.toLowerCase();
    let len = str.length;
    for(let i = 0; i<Math.floor(len/2); i++){
    	if(str[i] !== str[len-i-1]) return "NO";
    }
    return answer;
}

let str = "gooG";
console.log(solution(str));

 

3. 문제풀이(2)

메소드를 사용해서 푸는 방법이 있다. 

1. 대소문자 구분하지 않으므로 처음부터 소문자 or 대문자로 통일시킨다.

2. 원래 문자열과 문자열을 거꾸로 뒤집은 것을 비교해서 같으면 YES 다르면 NO 를 리턴한다.

3. 문자열을 String.split() 메소드로 하나씩 떨어트려서 배열로 만들고, 

Array.reverse() 메소드로 뒤집는다. Array.join() 메소드로 문자열로 만든다. 

 

 

String.split()

빈문자열을 넣고 split하면 문자 요소가 하나씩 나누어져서 배열이 된다.

배열화가 되어야 reverse 메소드를 사용할 수 있다. 

 

Array.reverse()

배열의 순서를 거꾸로 만드는 메소드

 

Array.join()

배열을 string으로 변환하는 메소드

 

function solution(str){
	let answer = "YES";
    str = str.toLowerCase();
    if(str.split('').reverse('').join('') !== str) return "NO"
    return answer;
}

let str = "gooG";
console.log(solution(str));

 

 

탐색문제 유형 중 하나인 봉우리 개수를 찾는 문제이다.

 

문제

N*N격자판이 주어지고 높이가 쓰여있다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역이다. 봉우리 지역이 몇 개인지 알아내는 프로그램을 작성해보자. 

 

입력예제 |

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

출력예제 |

10

 

접근

1. 기준점을 정하고 네 방향을 탐색한다. 이중 for문으로 2차원 배열을 탐색한다. (if문 남발하지않고 작성)

2. 배열의 각 요소를 탐색하면서 상하좌우 크기 비교 -> 나보다 큰게 없으면 봉우리다 -> 카운팅한다.

 

 

풀이

세부적으로 풀이를 해보면,

 

1.

내 좌표(기준점) 에서 상하좌우 좌표를 구해야한다. 

자신과 상하좌우 숫자를 비교해야한다. 움직여야할 행과 열을 배열로 작성한다. (시계방향) 

행과 열은 세트로 움직인다. 

 

상, 하 행 이동

행 = [상, 우, 하, 좌]  dx = [-1, 0, 1, 0] 

좌, 우 열 이동

열 = [상, 우, 하, 좌]  dy = [0, 1, 0, -1] 

 

2.

내 좌표(기준점)은 i과 j가 이중for문을 돌면서 좌표를 구한다. 

 

3.

상하좌우, 4번 k for문 돌아야한다.

내 좌표의 값과 네 방향의 좌표 비교해서, 네 방향이 더 작으면 answer++한다. 

let nx = i+dx[k]; → i에 -1이나 1을 더해 행을 옮긴다 (상하이동)
let ny = j+dy[k]; → j에 -1이나 1을 더해 열을 옮긴다 (좌우이동)

상 → 행이 -1로 이동할 때 열은 0 이동 (열 이동없음)

→ 행이 1로 이동할 때 열은 0 이동 (열 이동없음)

→ 열이 1 이동할 때 행은 0 이동 (행 이동없음)

→ 열이 -1 이동할 때 열은 0 이동 (행 이동없음)

 

4.

flag는 봉우리인지 아닌지 체크한다.

flag가 0이면 answer 카운팅 안되고, 1이면 카운팅된다. 

 

코드

function solution(arr){
            let answer = 0; //카운팅해야되니까 0으로 
            let n = arr.length;
            let dx = [-1, 0, 1, 0];
            let dy = [0, 1, 0, -1];
            for(let i=0; i<n; i++){
                for(let j=0; j<n; j++){
                    let flag=1;
                    for(let k=0; k<4; k++){ // 4방향이라서 4번돌도록 맞춤
                        let nx = i+dx[k]; // 가려고하는 방향 행 좌표
                        let ny = j+dy[k]; // 가려고하는 방향 열 좌표 
                        if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny] >= arr[i][j]){ 
                            // arr[nx][ny]상하좌우좌표 >= 현재지점좌표 arr[i][j]
                            // nx>=0 && nx<n && ny>=0 && ny<n는 
                            // 내 상하좌우가 네방향으로 존재하지 않는 경우도 있으니 그 경우는 제외하는 조건
                            // 현재지점 좌표보다 큰게 있으면 봉우리가 아니다. 이걸 확인하기 위해서 flag변수 작성해준 것
                            flag=0;
                            break; // k for문 멈춤
                        }  
                    }
                    if(flag) answer++; 
                    // 상하좌우 다 돌고 나와서 flag가 그대로이면 answer++ 해준다
                }
            }
            return answer;
        }

    let arr = [[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(arr));

문제

N*N 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력하세요.

 

입력예제 |

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

출력예제 | 

155

 

 

 

풀이

1. 각 행의 합, 각 열의 합 구한다. (합을 구해야할 때는 sum 변수 만들어주어야함. 여기서는 행의 합, 열의 합 필요해서 2개 선언)

2. 각 대각선의 합 구한다.

3. 비교해서 최대값을 구해서 answer에 넣는다. 

4. answer 출력

function solution(arr){
            let answer = Number.MIN_SAFE_INTEGER;
            // 1. answer는 최대값을 찾아야하니까 최소값으로 초기화 해놓는다. 
            let n = arr.length;
            let sum1 = 0;
            let sum2 = 0;
            // 행의 합은 sum1로 저장
            // 열의 합은 sum2로 저장
            // 행 탐색, 열 탐색을 이중for문으로
            for(let i = 0; i < n; i++){
                sum1 = 0;
                sum2 = 0;
                // for문이 한 번 끝날 때마다 매번 초기화를 시켜줘야한다.
                for(let j = 0; j < n; j++){
                    sum1 += arr[i][j]; // i가 돌고 j 고정(i기준 j의 모든 값 더하여 누적)
                    sum2 += arr[j][i]; // j가 돌고 i 고정(j기준 i의 모든 값 더하여 누적)
                    // 행이 돌고 열이 고정된다
                }
                answer = Math.max(answer, sum1, sum2); 
                // 최대값 구하는 메소드
            }
            
            // 이제 대각선의 합 구하는 for문 작성
            // 새로 대각선 합 구해야해서 초기화 해주어야한다.
            sum1 = 0; 
            sum2 = 0;
            for(let i = 0; i < n; i++){
                sum1 = arr[i][i]; // 똑같은 인덱스의 행과 열 
                sum2 = arr[i][n-i-1]; // sum1과 대칭인 값을 구해주어야한다.
            }
            answer = Math.max(answer, sum1, sum2);
            return answer;
    }
        

llet arr = [[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(arr));

행과 열을 같이 탐색해야하므로 이중for문을 사용해준다.

행 -> i / 열 -> j

function solution(arr){
        let answer;
        let n = arr.length;
        let sum1 = 0;
        let sum2 = 0;
        for(let i = 0; i < n; i++){
            sum1 = 0;
            sum2 = 0;
            for(let j = 0; j < n; j++){
                sum1 += arr[i][j];
                sum2 += arr[j][i];
            }
            answer = Math.max(sum1, sum2);
        }
        sum1 = 0;
        sum2 = 0;
        for(let i = 0; i < n; i++){
                sum1 += arr[i][i];
                sum2 += arr[i][n-i-1];
        }
        answer = Math.max(sum1, sum2);
        return answer;
    }

        let arr = [[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(arr));

answer에 가장 작은 정수를 써주지 않고도 작성이 가능하다.

 

여기서 더 알아보아야할 개념! 

for문이 돌때마다 sum 변수를 초기화해주는 것.

자바스크립트 스코프 개념 정리할 것

 

 

 

알게된 개념

2차원 배열

배열안에 또 다른 배열이 있는 것 

2차원 배열은  행과 열이 있다. 

행과 열이 있을때, 행부터 써준다.

arr[행][열]

 

 

 

문제

N(1<=N<=100)명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요. 같은 점수가 입력될 경우 높은 등수로 동일 처리한다. 즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.

 

입력예제 | 87 89 92 100 76

출력예제 | 4 3 2 1 5

 

 

풀이

이중 for문을 사용한다. 값을 두개씩 비교하면서 조건에 충족하면 answer를 ++하는 방법을 사용한다. 

 

이중for문 개념

for(let i = 0; i < 5; i++){
	for(let j = 0; j < arr.length; j++){
	}
}

i = 0 일 때, j가 0부터 arr.length 까지 돈다. 

i = 1 일 때, j가 0부터 arr.length 까지 돈다.

i = 2 일 때, j가 0부터 arr.length 까지 돈다.

i = 3 일 때, j가 0부터 arr.length 까지 돈다.

i = 4 일 때, j가 0부터 arr.length 까지 돈다.

 

 

처음에 푼 방법1

function solution(arr){
	let answer = [];
    
    let count = 1;
    for(let i = 0; i < arr.length; i++){
    	for(let j = 0; j < arr.length; j++){
        	if(arr[j] > arr[i]) {
            	count++; 
            } else count = 0;
            answer.push(count);
            }
            return answer;
     	}
}
        
let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));

처음에 푼 방법2

const solution = (arr) => {
  let answer = [];

  for (let i = 0; i < arr.length; i++) {
    let count = 0;
    for (let j = 0; j < arr.length; j++) {
      if (arr[i] < arr[j]) count++;
    }
    answer.push(count + 1);
  }
  return answer;
}

const arr = [87, 89, 92, 92, 76];
console.log(solution(arr));

현재값arr[i]이 arr[j]보다 작으면 카운팅,

내 값에서 +1한 값을 answer배열에 누적한다. 

 

다른 풀이

1로 초기화된 1차원 배열을 answer에 미리 만들어놓는다.

let n = arr.length;
let answer = Array.from({length:n}, ()=>1);
// Array.from으로 배열의 모든 요소를 1로 바꿔주었다. 
// [1, 1, 1, 1, 1]
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]++;
                // answer의 i번째 값을 ++ 해준다.
                // answer는 배열이니까 answer배열의 i번째에 넣어서 ++ 해줘야한다.
            }
         }
         return answer;
        
}
        
let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));

 

사용한 개념

Array.from

배열값을 변경하여 새로운 배열 생성

유사배열객체arrayLike나 반복 가능한 객체를 얕게 복사해서 새로운 Array 객체를 만든다. 

배열값 각각에 원하는 연산을 수행해서 새로운 배열 생성하기

console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]

console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]
// 콜백함수로 화살표 함수 사용

 

1. 문제

OX문제 시험에서 연속적으로 답을 맞히는 경우에는 가산점을 주기로 했다. 앞의 문제에 대해서는 답을 틀리다가 답이 맞는 처음 문제는 1점으로 계산한다. 또한, 연속으로 문제의 답이 맞는 경우에서 두 번째 문제는 2점, 세 번째 문제는 3점, ..., K번째 문제는 K점으로 계산한다. 틀린 문제는 0점으로 계산한다. 답이 맞은 문제의 경우에는 1로 표시하고, 틀린 경우에는 0으로 표시한다. 채점 결과가 주어졌을 때, 총 점수를 계산하는 프로그램을 작성하세요.

 

입력 예제 | 1 0 1 1 1 0 0 1 1 0

출력 예제 | 10

 

 

2. 문제풀이과정

1. 배열 탐색(for 반복문) 

2. 하나씩 돌면서 점수를 누적해주는데, 가산점을 같이 더하면서 계산해주어야 한다. 

 

[시도 1]

function solution(arr){
	let answer = 0;
    for(let i=0; i<arr.length; i++){
    	if(A[i] === 1){
        	answer += 1;
        } else answer += 0;
     }
     return answer;
}

let A = [1, 0, 1, 1, 1, 0, 0, 1, 1, 0];
console.log(solution(A));

처음에 이렇게 작성했는데, 가산점 계산이 안되어서 6이 나왔다. 

가산점 계산을 하려면 뭔가 요소가 더 필요한 것 같은데 뭘까 고민하다가

 

[시도 2]

function solution(arr){
	let answer = 0;
    let count;
    for(let i=0; i<arr.length; i++){
    	if(A[i] === 1){
        	answer += 1;
            count = answer++;
        } else answer += 0;
     }
     return count;
}

let A = [1, 0, 1, 1, 1, 0, 0, 1, 1, 0];
console.log(solution(A));

count 변수를 하나 더 만들어줘서 answer+1값이 count에 누적되도록 했다. 

그렇지만 아직 계산이 정확히 되지 않았다. 

 

[시도 3]

function solution(arr){
	let answer = 0;
    let count = 0;
    	for(let i=0; i<arr.length; i++){
        	if(arr[i] === 1){
            	count++; // count = count + 1
                answer+=count; // answer = answer + count // answer에 count누적
            } else count=0; // 0이 들어올 경우 count 초기화 
         }
    return answer;
}

let A = [1, 0, 1, 1, 1, 0, 0, 1, 1, 0];
console.log(solution(A));

answer와 count에 모두 누적을 해줘야하니까 0으로 설정해준다. 

count에 값을 먼저 더하고, answer에 count를 더해서 누적해준다. 

0점일 경우는 count를 다시 0으로 만든다. 

 

 

for of 문(배열의 값을 기반으로 반복)을 써도 가능하다! 

function solution(arr){
	let answer = 0;
    let count = 0;
    	for(x of arr){
        	if(x === 1){
            	count++; // count = count + 1
                answer+=count; // answer = answer + count
            } else count=0;
         }
    return answer;
}

let A = [1, 0, 1, 1, 1, 0, 0, 1, 1, 0];
console.log(solution(A));

+ Recent posts