JS 알고리즘 문제풀이/섹션 6. 자료구조(스택, 큐) 7

7.교육과정설계(큐)

📌강의 정리 큐를 이용해서 두 개의 문자열을 비교하며 하나의 문자열이 제대로 규칙에 맞게 작성되었는지 확인하는 문제이다. 첫번째 문자열의 순서가 두번째 문자열에 그대로 있어야하며(문제에서는 선수과목으로 표현함) 첫번째 문자열에 있는게 두번째 문자열에 없어도 안된다. 이 문제는 첫번째 문자열을 split을 이용해 배열로 바꾼후 두번째 문자열을 하나씩 반복하여 우선 두번째 문자열의 문자가 첫번째에 있는지 확인하고 있다면 첫번째와 비교하여 첫번째의 문자열의 첫번째 문자와 같으면 첫번째 문자열에서 그걸 shift해주고 아니라면 바로 return해준다. 📌느낀점 문제를 살짝 어렵게 풀었던게 주어진 필수과목이 반드시 계획에 포함된다는 것을 캐치하지 못했다. 그래서 포함되지 않았을 경우도 포함하여 알고리즘을 짜느라 ..

6.공주구하기(큐)

📌강의 정리 큐를 사용하는 문제이다. 처음에 주어진 길이만큼 배열을 만든다. 그 다음 반복을 돌면서 주어진 숫자만큼 앞에서 shift하고 그 숫자를 뒤로 push한다. 이후 주어진 숫자의 반복이 끝나면 한번더 shift 하고 그걸 배열의 길이가 1일때까지 반복하다 길이가 1이 되면 배열의 숫자를 반환한다. 📌느낀점 오랜만에 잘 푼 문제인 것 같다. 디테일이 살짝 아쉽지만 그건 이제부터 조금씩 챙기기로 하고 우선 문제를 풀었다는 점이 뿌듯하다. Array.from을 머리에 잘 새겨놓자. //나의코드 //강사님 코드

5.쇠막대기(스택)

📌강의 정리 조건문을 잘 써야하는 문제이다. ()가 나온다면 10중8,9는 스택으로 풀리는 문제이다. “(”가 나오면 스택에 쌓아주고 “)”가 나온다면 바로 전의 것이 “(”이었는지 “)”였는지 확인해 “(”였으면 스택을 pop하고 answer를 stack.length만큼 더해주고 “)”였다면 그냥 pop만 해준다. 📌느낀점 나는 이번에도 쉬운 문제를 굳이 어렵게 풀었다. 그냥 answer를 조건마다 해줄게 아니고 stack의 길이만큼만 레이저가 왔을 때 딱딱 더해주면 되는건데.. 깊이가 부족했다. 좀 더 깊게 생각해서 코드를 간결하게 표현할 수 있도록 하자. //나의코드 //강사님 코드

4.후위식 (postfix) 연산(스택)

📌강의 정리 주어진 문자열에서 반복문으로 하나씩 뽑아 isNaN을 써서 숫자이면 스택에 넣어주고 문자이면 pop 2번과 조건문 4개를 이용해 계산하여 스택에 넣어준다. 스택에 남은 한개의 숫자가 답이다. 📌느낀점 나는 쉬운 문제를 굳이 함수를 써서 어렵게 풀었다. 가끔은 복잡하다 생각되는 풀이가 사실은 간단한 풀이일 수도 있기에 좀 더 깊게 생각해보는 것이 필요한 것 같다. 또한 isNaN의 쓰임새도 잘 생각해두어야 겠다. //나의코드 //강사님 코드

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

📌강의 정리 forEach와 반복문을 사용해서 주어진 2차원 배열에서 0이 아닐때까지 반복했다가 0이 아니면 그 숫자를 stack에 넣어주되 넣기전에 그 숫자가 stack에 쌓여있던 숫자와 같은지 비교하고 같으면 answer+=2하고 아니면 그냥 stack에 넣어준다. 📌느낀점 이번문제는 문제의 이해에서 두번 돌아갔다. 알고리즘 또한 막 어려운건 없지만 세세하게 까다로운 조건들이 있었으며 그래서 시간이 조금 오래걸린것같다.. forEach를 썼다면 조금 더 편했을 수 있었기에 항상 메서드들을 잘 활용할 줄 알아야겠다. //나의코드 //강사님 코드

2.괄호 문자 제거(스택)

📌강의 정리 문자열 내의 괄호안의 문자들을 전부 제거하는 문제였다. for문을 돌리며 문자들을 계속 스택에 쌓다가 “)”를 만나면 “(”까지의 모든 스택에 쌓인 모든 문자들을 pop해준다. 📌느낀점 이번에는 복잡도로만 따지면 내 풀이가 조금 더 괜찮지 않나? 하는 생각도 살짝 들기는 한다. 스택에 와서는 알고리즘 실력이 조금 늘어서인지 아직 여유가 있는 것 같다. 좋다. //나의 코드 //강사님 코드

1.올바른 괄호(스택)

📌강의 정리 괄호가 제대로 성립하지 확인하는 문제이다. 스택이란 자료구조를 사용한다. 반복문으로 문자열을 반복하며 그 문자들을 봐서 ( 일때는 스택에 쌓고 ) 일때는 스택에서 ( 를 뺀다. 이때 스택에 아무것도 없는데 ) 가 나오면 괄호가 성립안되므로 NO를 리턴한다. 반복이 끝나고 스택의 길이가 0이면 YES 아니면 NO이다. 📌느낀점 알고리즘을 구현하는건 쉬웠지만 문제를 제대로 이해하지못했다. 지금 생각해보면 괄호가 성립되어야 하므로 나중에 ) 가 스택0일때 나오면 NO가 맞고 또 알고리즘짤때도’ ) 가 먼저 나오면 어떻게 처리해야하지’ 를 생각했어야 했는데 그걸 생각못했다.. 알고리즘 짤때 짜기전에 미리 생각을 많이 하고 흐름을 만들어둬야 한다. //나의 코드 //강사님 코드