inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

3. 크레인 인형뽑기(스택)

코드 리뷰 부탁드려요~ 앞에 괄호문제에서 while문 쓰셨던거 활용해서 while문 사용했는데 더 복잡한 방식인가요?

301

지루한 메기

작성한 질문수 11

0


## 풀이
1. 변수 stack 선언, 뽑은 인형을 순서대로 담을 바구니, 빈배열 [] 할당한다.\
2. 이중 for문) 5 * 5 board 2차원 배열을 조회하기 위해 이중 포문으로 숫자 요소(각 인형)를 조회한다.
2-1. 외부 for) 인형을 뽑을 위치가 담긴 moves 배열의 수 요소(board의 열 길이)를 모두 조회한다.
2-2. 내부 for) moves 배열요소, 즉 board의 열을 1번 조회할때 board의 행 길이까지를 돌며 행 요소를 조회한다.
= > 열고정 , 내부 포문 행의 요소를 다 조회한 후 => 다음 열을 조회하는 식
3. 내부 for문 내 if조건문
4. if문) 뽑은 인형(보드의 행열 요소)가 0이 아닌 경우, (인형이 있는 2차원 배열 요소)
5. while문) 뽑으려는 인형(보드 행열 요소)과 같은 인형이 바구니에 맨위(stack의 마지막요소)에 담겨있는 경우?
=> 뽑은 인형이 있던 보드의[헹][열-1]요소를 0으로 변경한다. 뽑았으니 인형이 없는 것이니깐!
=> stack.pop() 으로 stack의 맨 위 인형을 삭제한다. (뽑은 인형과 같은 인형)
=> cnt 개수를 인형이 2개 제거되었으니 +2 올려준다.
5-1. while문 탈출조건) 뽑는 인형과 stack 바구니에 담긴 맨위 인형과 다를 경우?
=> while문을 종료하고 뽑은 인형을 stack바구니에 담는다.
6. 2차원 배열을 조회하는 for문이 종료되고, 인형이 몇개 제거되었는지 cnt를 리턴한다.
       function solution(board, moves) {
        let cnt = 0;
        let stack = [];
        // 열 조회
        for (let column = 0; column < moves.length; column++) {
          // 행 조회 (1열 조회 후 모든 행 조회식)
          for (let row = 0; row < board.length; row++) {
            //
            if (board[row][column - 1] !== 0) {
              while (board[row][column - 1] === stack[stack.length - 1]) {
                board[row][column - 1] = 0;
                stack.pop();
                cnt += 2;
              }
              // 같지 않은경우 stack에 뽑은 인형을 담는다.
              stack.push(board[row][column - 1]);
            }
          }
        }
        return cnt; // 4
      }

      let board = [
        [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],
      ];

      let moves = [1, 5, 3, 5, 1, 2, 1, 4];
      console.log(solution(board, moves));

javascript 코테 준비 같이 해요!

답변 1

0

김태원

안녕하세요^^

네. 잘 하신 것 같네요.

continue를 사용하는 이유

0

101

2

정렬 가능 여부 판단하기

0

80

2

알고리즘 학습법 관련해서 질문드립니다.

0

95

1

코드 리뷰 부탁드립니다!

0

107

1

indexOf를 사용해서 풀어보았습니다 !!

0

75

1

저는 이런식으로 구현 해보았습니다 !!

0

69

1

12,13,14 강의 소리만 나오고 검은 화면입니다

0

110

3

반복문 최소화하고 indexOf 사용해서 풀어봤습니다

0

74

1

영상 보기 전에 직접 풀어봤습니다.

0

79

1

섹션1의 17번문제 이 풀이로 풀어도 될까요?

0

141

2

정규표현식으로 처리해도 상관없나요 ?

0

127

2

3칸씩 건너뛸 수 있을 경우

0

132

2

강의에 대해 질문있습니다.

0

144

2

Object와 Set을 이용해 풀어봤습니다.

0

128

2

이렇게 해도 되나요?

0

107

2

선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.

0

149

2

이렇게 풀어도 괜찮을까요?

0

145

1

이렇게 풀어도 괜찮을까요?

0

123

1

모든 아나그램 찾기에서 시간복잡도

0

106

1

코드리뷰 부탁드립니다.

0

138

1

for loop 탈출은 return 문으로 해도 되지 않나요?

0

133

1

투포인트알고리즘으로 풀어봤습니다.

0

147

0

코드 리뷰 부탁드립니다.

0

121

1

코드 맞게 작성한 거 아닌가여??

0

149

1