728x90

프로그래머스 - 문자열 lv1

크레인 인형뽑기 게임 (_JS)

 

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

 

제한 사항

  • board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.
  •  

입출력 예


코드

2022.01.17.

function solution(board, moves) {
    var answer = 0;

    let stack = [];

    moves.forEach( move => {
        let flag = true;
        let stackLen = stack.length;
        stack = SameChecking(stack);

        if( stackLen !== stack.length ){
            answer += 2;
        }

       board.forEach( x => {
           if(flag){
               if( x[move-1] !== 0 ){
                   stack.push(x[move-1]);
                   x[move-1] = 0;
                   flag = false;
               }
           }
           else{
               return false;
           }
       });
    });

    return answer;
}

function SameChecking(stack){
    let prevItem = 0;
    stack.forEach( ( item, index ) => {
        if( prevItem === item ){
            stack.splice(index-1, 2);
            return stack;
        }

        prevItem = item;

    });

    return stack;
}

 

728x90

Set Object

Set object 는 map과 함께 ES6에 새로 도입된 자료구조로, 자료형에 관계 없이 원시 값 (primitive value)과 객체 참조 모두 유일한 값을 저장할 수 있다. Set은 중복을 허용하지 않는 데이터 집합으로 Set을 사용하게 되면 데이터에 빠르게 액세스를 할 수 있다.

 

Set은 중복을 확인하기 위해서 자동으로 형변환을 해주지 않기 때문에 1 과 "1"은 다른 것으로 처리 된다.

forEah와 for of로 값에 접근이 가능하다.

 

Set object는 value collection으로 삽인 순서대로 요소를 순회할 수 있다. NaN과 undefined도 Set에 저장할 수 있다. NaN !== NaN이지만, Set내에서는 NaN은 NaN과 같은 것으로 간주한다.

const set = new Set([1,2,3,4,5]);

console.log(set.has(1)); // true
console.log(set.has(6)); // false

 

구문

new Set( [ iterabled ] );

 

매개변수

iterable : 반복 가능한 객체가 전달된 경우 그 요소는 모두 새로운 Set에 추가된다. 만약 매개변수를 명시하지 않거나 null을 전달하면, 새로운 Set은 비어 있는 상태가 된다.

 

반환 값

새로운 Set object

 

속성

  1. Set.prototype.add() : 요소 추가
  2. Set.prototype.clear() : Set Object 비우기
  3. Set.prototype..Set() : constructor
  4. Set.prototype.delete('value') : 해당 값 Set에서 삭제
  5. Set.prototype..forEach : 반복문
  6. Set.prototype..entries : map에서의 entries와 동일, 순회할 수 있는 Interator로 반환
  7. Set.prototype..values() : Set내의 value들을 순회할 수 있는 Interator로 반환
  8. Set.prototype..has('value') :해당 값을 가지고 있는 판별 boolean return
  9. Set.prototype.size() : Set 객체 내의 요소의 갯수 return
728x90

Map Object

Map Object는 key-value 쌍을 보유하고 있으며, 키의 삽입순서를 기억하고 있다. 

key를 사용하여 value를 get, set할 수 있다. 

key는 중복될 수 없으며, 하나의 key에는 하나의 value만 저장 가능

key로 사용할 수 있는 데이터 : string, symbol(ES6), object, function => number는 key로 사용이 불가능하다.

const map = new Map();

map.set('a',1);
map.set('b',2);
map.set('c',3);

console.log(map.get('a')); // 1

 

Map method

  1. Map.prototype.size : Map 객체의 키-값 쌍의 갯수 반환
  2. Map.prototype.get : Map.get('key') 해당하는 key의 value를 반환
  3. Map.prototype.set : Map.set('key','value') 키와 값을 map에 넣어줌
  4. Map,prototype.clear : Map 객체를 비워준다. === size 를 0으로 만들어준다.
  5. Map.prototype.forEach :
    // Arrow function
    forEach(() => { /* ... */ } )
    forEach((value) => { /* ... */ } )
    forEach((value, key) => { /* ... */ } )
    forEach((value, key, map) => { /* ... */ } )
    
    // Callback function
    forEach(callbackFn)
    forEach(callbackFn, thisArg)
    
    // Inline callback function
    forEach(function() { /* ... */ })
    forEach(function(value) { /* ... */ })
    forEach(function(value, key) { /* ... */ })
    forEach(function(value, key, map) { /* ... */ })
    forEach(function(value, key, map) { /* ... */ }, thisArg)​
    
    // Array.prototype.forEach와 통일성을 유지하기 위해서 parm순서 value, key
  6. Map.prototype.delete : Map.delete('key') 해당 key와 value 쌍을 map collection에서 삭제
  7. Map.prototype.has : Map.has('key') 해당 key에 해당하는 value가 존재하는지 확인 boolean return
  8. Map.prototype.entries : Map.entries(); 는 map안의 모든 entry들을 순회할 수 있는 iterable object를 반환해준다.
    const map = new Map();
    
    map.set('a',1);
    map.set('b',2);
    map.set('c',3);
    
    const entMap = map.entries();
    
    console.log(entMap.next().value); // ['a', 1]
    console.log(entMap.next().value); // ['b', 2]
    console.log(entMap.next().value); // ['c', 3]​
  9. Map.prototype.keys() : entries 와 같이 map안의 모든 key값을 순회할 수 있는 iterable object를 반환해준다.
    const map = new Map();
    
    map.set('a',1);
    map.set('b',2);
    map.set('c',3);
    
    const entMap = map.keys();
    
    console.log(entMap.next().value); // a
    console.log(entMap.next().value); // b
    console.log(entMap.next().value); // c​
  10. Map.prototype.values() : map안의 모든 value들을 순회할 수 있는 iterable object를 반환
    const map = new Map();
    
    map.set('a',1);
    map.set('b',2);
    map.set('c',3);
    
    const entMap = map.values();
    
    console.log(entMap.next().value); // 1
    console.log(entMap.next().value); // 2
    console.log(entMap.next().value); // 3​

 

[+] 참고하면 좋을 블로그

https://medium.com/@hongkevin/js-5-es6-map-set-2a9ebf40f96b

 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set

728x90

Array.prototype.filter()

filter()는 주어진 함수의 조건을 통과하는 모든 요소를 모아 새로운 배열로 반환하는 메서드이다.

 

구문

arr.filter( callback ( element[, index[, array]])[, thisArg])

 

매개변수

  • callback : 각 요소를 필터링할 조건을 담고 있는 함수로 boolean을 반환한다. 반환 값이 true이면 값을 유지하고 false이면 요소를 삭제한다.
    • element : 처리할 현재 요소
    • index ( option ) : 처리한 현재 요소의 인덱스
    • array ( option ) : filter를 호출한 배열
    • thisArg ( option ) : callback을 실행할 때 this로 사용하는 값

반환 값

callback 함수로 걸러진 새로운 요소들로 이루어진 배열을 반환한다. 어떠한 요소도 조건을 통과하지 못했을 경우 빈 배열을 반환한다.

 

예제 코드

// 예제 코드
// 2의 배수만 남기기

let arr = [1,2,3,4,5];

arr = arr.filter( i => {
   return i % 2 === 0;
});

console.log(arr); // [2, 4]

 


map과 filter의 공통점

    : 기존배열은 수정하지 않고 요소들을 순환하면서 새로운 배열을 반환한다.

 

 map과 filter의 차이점

    : map은 콜백함수의 내용을 기존의 요소에 적용하여 새로운 요소를 생성/반환

    : filter는 콜백함수의 조건문을 만족하는 요소들을 반환

 

 

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

https://velog.io/@tjdud0123/javascript-map-filter-%ED%95%A8%EC%88%98

+ Recent posts