연산자 끼워넣기

https://www.acmicpc.net/problem/14888

삼성 코딩 테스트 기출 문제이다.

시간 초과가 났다.

오답 풀이

다음의 예를 보자.

숫자 : 1 2 3 4 5 6

연산자 : 2 1 1 1


따라서 연산자는 다음과 같다.

+, +, -, *, /


경우의 수는 같은 것을 포함하는 순열이다.

5! / 2!


각각의 경우에 숫자를 이용해 계산을 하고, 계산 값들 중에 최소값, 최대값을 찾는다.

정답 풀이

시뮬렌이션 문제라고 생각했다.

해설을 보고 완전 탐색 문제란 것을 알았다. 따라서 BFS or DFS 로 풀 수 있다. 익숙한 BFS로 해결하였다.


다음의 예시에서 나올 수 있는 모든 경우의 수를 그림으로 그려보자.

숫자 : 1, 2, 3, 4

연산자 : +, +, *


문제에서 주어진대로, 숫자는 순서를 그대로 유지한다.

1 다음에 오는 숫자는 2다. 1과 2를 계산할 수 있는 연산자는 + 와 * 이다. 이 두 경우를 큐에 넣는다.

1+2 와 3 을 계산 할 수 있는 연산자는 +와 * 이다. 이 두 경우를 큐에 넣는다.

이와 같은 방식으로 모든 경우의 수를 큐에 넣는다.

모든 연산자를 사용 했을 때(트리의 마지막 depth)가 최종 결과값 이므로, 이들 중에 최대값 및 최소값을 구한다.

Comments