본문 바로가기

Algorithm/인프런(inflearn)86

[ 자바스크립트(JavaScript) ] section06 - 5 - 쇠막대기 📍 section06 - 5 - 쇠막대기 이전에 풀어봤던 문제다. 당시 처음 풀 때는 이 문제를 왜 stack으로 푸는지 이해가 안 됐는데, 다시 보니까 조금이나마 이해가 된다. 이전 stack 유형과는 달리 stack[-1]값을 비교하는 것이 아니라 주어진 문자열 s[i-1]을 기준으로 비교하기 때문에 그 부분을 잘 캐치해야 문제를 풀 수 있다. 그리고 레이저를 만났을 때 cnt를 계산하는 방법이 조금 어려울 수 있는데, 레이저를 만나게 되면 지금까지 stack에 들어가 있는 (길이만큼 누적해주면 된다. ((는 쇠막대기를 의미함) 레이저를 만나지 않고 쇠막대기 (를 만나게 되면 cnt++을 해주면 된다. (는 무조건 stack에 넣는다. )를 만날 때 stack.pop()을 하는데, 여기서 s[i-1].. 2021. 9. 2.
[ 자바스크립트(JavaScript) ] section06 - 4 - 후위식 연산(postfix) 📍 section06 - 4 - 후위식 연산(postfix) 간단하게 후위식 연산에 대해서 알아보자면, 우리가 일반적으로 사용하는 사칙연산 7+7은 중위표기식이라고 한다. (숫자 사이에 +-*/가 들어감.) 후위표기식은 주로 컴퓨터가 많이 사용하는 방법으로 괄호가 없어도 우선순위를 정확하게 알 수 있다는 점에서 S/W에서 널리 쓰인다. 숫자를 만나면 stack에 담는다. 연산자를 만나면 stack에서 2개의 값을 꺼내 계산한다. 계산한 값을 다시 stack에 넣는다. stack에 값이 1개면 계산이 끝난다. 나는 이렇게 풀었다. 숫자는 모두 stack에 넣는다. 연산자를 만났을 때 stack에서 값 2개를 빼고 getCalculator 함수에 넣는다. 연산이 끝나면 다시 stack에 넣는다. 선생님은 이.. 2021. 9. 1.
[ 자바스크립트(JavaScript) ] section06 - 3 - 크레인 인형뽑기(카카오 기출) 📍 section06 - 3 - 크레인 인형뽑기(카카오 기출) 프로그래머스에서도 풀 수 있는 문제다. 예전에 한창 python으로 풀때는 끝까지 풀지 못했는데 지금 와서 JS로 풀어보니까 정답 판정을 받았다. 왜 못 풀었냐면 집게가 위에서부터 내려올 때는 2차원 배열에서 arr[row][column]가 아니라 arr[column][row]로 놓고 풀었어야 하는데, 왜 그렇게 설정하는지 잘 이해가 안 됐고, 집게로 인형을 뽑고 난 이후에 해당 값을 0으로 바꿔줘야 같은 `column`에 집게가 내려오면 다음 인형을 뽑을 수 있는데 이 과정을 이해하지 못했었다. 풀이 방법은 다음과 같다. move는 배열의 인덱스를 건드려야하므로 각각 1씩 빼주고 계산해야 한다. 집게가 내려오는 column에 값이 있으면 인.. 2021. 9. 1.
[ 자바스크립트(JavaScript) ] section06 - 2 - 괄호 문자 제거 📍 section06 - 2 - 괄호 문자 제거 소괄호() 사이의 모든 문제를 제외하고 남은 문자만 출력하는 문제다. 나의 풀이 방법은 다음과 같다. 반복문을 선언하고 현재 값이 문자인지 아닌지 검사한다.(정규식) 이때, stack에 아무것도 없다면 answer에 값을 더해준다. 현재 값이 (면 모두 stack에 넣는다. 현재 값이 )인데, 만약 stack[-1]이 (면 stack.pop을 해준다. 선생님은 조금 더 간단하게 푸셨다. (와 문자는 모두 stack.push한다. )가 나오면 (가 나올 때까지 모두 pop해준다. let s = "(A(BC)D)EF(G(H)(IJ)K)LM(N)"; // let s = "(AB(A))B(A)"; console.log(solution(s)); // 나의코드 fun.. 2021. 8. 31.
[ 자바스크립트(JavaScript) ] section06 - 1 - 올바른 괄호 📍 section06 - 1 - 올바른 괄호 이번 섹션은 stack과 queue 자료구조를 배운다. 이 문제를 풀고 나서 백준9012 - 괄호를 푸는것을 추천한다. 풀이 방법은 다음과 같다. 입력 값은 오직 (, )만 있다는 것을 알면 조금 더 쉽게 풀 수 있다. (가 나오면 stack에 push한다. )가 나왔을 때 stack이 비어있다면 짝을 지을 괄호가 없기 때문에 false를 return 하면 되고, stack이 비어있지 않다면 (만 있을 것이기 때문에 stack.pop()을 해준다. 반복문이 모두 종료된 이후 stack을 봤을 때 한 개라도 남아있다면 올바른 괄호가 매칭되지 않았기 때문에 false 한개라도 없으면 true를 리턴해준다. let s = ")())" console.log(solut.. 2021. 8. 31.