Basic/자료구조와 알고리즘 Algorithm

나의 알고리즘 공부 여정3 - 스택과 큐, 풀이의 유사성

joyCHAE 2021. 3. 10. 23:08

 

20210310_TIL

 

  • 스택, 큐 관련 백준 알고리즘 문제를 풀면서 경험을 쌓았다. 스택, 큐 개념은 이틀 전 밤에 강의를 들으면서 익혀놨던 터라 개념을 알고는 있었는데 관련 문제를 푸는 건 처음이었다. 따라서 어떻게 관련 method들을 적용하여 구현해야 할 지 감이 안와서 내가 짠 코드들이 매우 마음에 안들었다. 스택 자료구조관련 method들을 완벽하게 응용해 풀지 못했다.

 

  • 그래서 든 생각인데 난이도 있는 개념을 공부한 후 관련 문제 풀이를 '처음할 때'에는, 2시간 정도 고민 후 모범 답안 풀이를 보고 풀이를 익히는 방법이 효율적일 것 같다. 개념을 모범적으로 구현한 풀이를 익히면, 다음에 동일 개념 다른 문제를 풀 때 코드가 좀 더 나아질 테니 말이다.

 

 

  • 마침 오늘 스택 관련 문제를 두 개나 풀었고, 모범 풀이를 보았다. 역시 비슷한 method를 사용해 비슷하게 구현했다. 그래서 스택 관련 문제는 이렇게 푸는구나~ 하고 감을 잡았다. 알고리즘 문제는 경험이 쌓이면 잘 풀게 된다는 말이 어떤 말인지 이제야 이해했다.

 

  • 틈틈히 프로그래머스 사이트에서 문제들을 풀어봐야지.

 

 

스택 관련 백준 문제들, 풀이의 유사성

 

 

균형잡힌 세상 4949번

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

스택 수열 1874번

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

두 문제 모두 스택 관련 문제이다.

 

 

왼쪽은 4949번 문제이고, 오른쪽은 1874번 문제의 모범답안이다.

 

두 개의 문제는 문제만 보면 유사하게 느껴지지는 않으나, 스택이라는 자료구조를 사용한다는 점에서 공통점이 있다.

바로 이 공통점에서부터 풀이가 유사해진다.

 

 

살펴보면, 다음과 같은 공통점이 있다.

 

 

1) Stack으로 활용할 빈 리스트를 만들고 시작한다.

 

2) while, for 등의 반복문을 통해 데이터를 넣고(append) 빼는(pop) 작업을 반복한다.

 

3) 반복하는 과정에서 조건문을 통해 어떤 조건에서 데이터를 넣고, 어떤 조건에서 데이터를 뺄 지 지정해준다.

 

 

이 공통점은 스택 문제뿐 아니라 큐 문제에도 적용된다. 파이썬의 리스트 형태로 pop, append, insert를 기본으로 큐를 구현하기 때문이다. 데이터를 앞에서 뺄지 뒤에서 뺄지만 달라지고, 사용되는 method는 비슷하다보니 풀이가 상당부분 유사해지는 부분이 있는 것 같다.

 


 

오늘 참석했던 항해99 알고리즘 관련 세미나에서 코딩 테스트에서 나오는 개념은 한정적이라고 들었다.

 

따라서 한정적인 개념 각각에 해당하는 문제풀이를 골고루 진행하며 문제풀이 경험을 쌓고, 각 개념들의 모범답안들을 보고 풀이의 유사성을 찾아나간다면 생각보다 단시간 안에 '코딩 테스트에서 필요한 문제풀이 실력'을 올릴 수 있을 듯도 하다.