TIL/kotlin 알고리즘

kotlin 프로그래머스 lv2 괄호 회전하기

crablo 2024. 3. 6. 10:47
728x90

1. 의도 및 이유
  1.  isValid 함수를 통해 문자열이 올바른 괄호 문자열인지 확인했고 함수 내부에서는 괄호의 쌍이 올바른지 확인하기위해
    스택을 활용했다. 스택은 열린 괄호를 저장하고, 닫힌 괄호를 만날 때 매칭이 되면 스택에서 제거하는 과정을 거쳤다.


2. 코드 동작 로직
  1. isValid함수: 문자열을 순회하면서 열린 괄호를 스택에 추가하고, 닫힌 괄호를 만날 때 해당 괄호의 짝이 
    스택의 맨 위에 있는지 확인하여 짝이 맞으면 스택에서 제거함
  2. 모든 문자열을 확인후 스택이 비었다면 올바른 괄호 문자열로 판단


3. 버그 또는 에러 및 해결
  1. 맨처음 for문으로 인덱스를 일일이 이동시키는 방법으로 구현시도하였으나 계속 에러나서
    다른 코드를 참조하면서 고쳐나가니 에러또는 버그는 없었음

해당 문제를 맨처음 for문을 이용해서 

 

변수 val str = StringBuilder()

// 왼쪽으로 한 칸씩 이동시키기
    for (i in 1 until str.length) {
        str.setCharAt(i - 1, str[i])
    }

 

이런식으로 문제를 풀다가 올바른 변수인지 어떻게 판단하는지에대해 고민을 많이하다가 검색을 해서 문제를 해결했다.

해당 문제는 대부분 자료구조라는 개념을 이용해서 해결한 사람들이 많았다.

https://roi-data.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EA%B0%9C%EB%A1%A0-1-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%E2%91%A0

 

[자료구조 개론] 1. 자료구조와 알고리즘 - ①

[자료구조 개론 단원 구성] 1. 알고리즘 - 순환 (Recursion, 재귀) - 정렬 (Sorting) - 검색 (Search, 탐색) 2. 자료구조 - 선형 자료구조 ① 리스트 (List) ② 스택 (Stack) ③ 큐 (Queue) - 비선형 자료구조 ① 트리

roi-data.com

코드는 아래와 같이 작성하였다.

 

문자열을 왼쪽으로 x칸 회전시키면서 올바른 괄호 문자열인지 확인한다.

s.substring(i) :i에서부터 끝까지 자른 문자열의 오른쪽에 s.substring(0,i) 처음부터 i번째 전까지의 문자열을 붙인다.

계속 반복하면서 붙여나가고 변수 rotatedString에 문자열을 저장한다.

그 후 isValid 함수에 집어넣고 유효성을 판단한다.

isValid 함수의 when 구문 내부에서 각 괄호에 대한 처리를 했는데,각각의 경우에서 스택에 열린 괄호를 추가하거나, 닫힌 괄호를 확인하여

올바른 쌍인 경우에 스택에서 제거하는 작업을 했다. 그리고 만약 닫힌 괄호가 나왔는데 이에 대응되는 열린 괄호가 스택에 없거나, 열린 괄호에 대응되는 닫힌 괄호가 나오지 않는 경우에는 return false가 호출되어 올바른 괄호 문자열이 아니라는 신호를 보낸다.

  • keep: 매일매일 til을 쓸것
  • problem:알고리즘 개념이 많이부족함
  • try:지속적으로 개념공부하기
728x90