danbi2990   3년 전

스택을 생각 못하고 재귀로 접근했습니다. (재귀도 스택이긴 하지만...)

중간에 알고리즘 분류가 스택인거 확인하고 아차 싶었지만 이왕 시작한거 한번 해보자 싶어서 계속 풀었습니다.

반례 얼추 확인해가며 맞겠다 싶었는데 런타임이 뜨네요...


대강의 로직은

1. 재귀함수에 들어온 문자열을 순회하면서 ( 개수를 센다. (이면 더하고 )이면 빼는 방식으로

2. 연산자가 나오면 아래의 우선순위로 인덱스와 함께 저장한다

(개수 0, 연산자 + 혹은 -

(개수 0, 연산자 * 혹은 /

(개수 1, 연산자 + 혹은 -

(개수 1, 연산자 * 혹은 /

괄호 개수가 0과 1인 이유는 수식에서 생략되거나 (0개) 표기될 (1개) 수 있기 때문이고

연산자 우선순위가 +- 우선인 이유는 재귀 돌리면서 +-를 먼저 처리해줘야 나중에 후위연산자로 붙여지기 때문입니다.

3. 가장 우선순위가 높은 연산자를 기준으로 왼쪽 오른쪽으로 식을 분리한다.

4. 선택한 연산자를 저장할 때 ( 개수가 1이었다면 문자열 가장 바깥쪽 1글자를 제외하고 인덱스에 1 빼준다. (가장 바깥 괄호 제외)

5. 왼쪽, 오른쪽 수식을 각각 재귀에 다시 넣고 반환한 결과를 합치고 그 뒤에 연산자를 합친다.

입니다. 재귀 리밋도 넉넉하게 설정했는데 런타임이 뜬걸로 봐서 인덱스 에러인 것 같은데...찾기가 어렵네요.

고수 선배님들의 지도 부탁드립니다.

댓글을 작성하려면 로그인해야 합니다.