먼저, 소수의 뜻을 정확하게 이해하시는 것이 필요할 듯 보입니다. (소수는 2,3,5,7의 배수가 아닌 수가 아니라, 약수가 1과 자기 자신뿐인 자연수입니다.) 121의 경우, 약수가 1, 11, 121으로 합성 수 입니다. 2,3,5,7로 나눠도 나머지가 0이 아니지만 이 수는 합성수입니다. 제가 볼 때, 작성하신 코드는 10이상의 소수에 10이상의 소수를 곱하는 경우, 모두 잘못 판단할 것 같습니다. (ex, 121(11 * 11), 143(11 * 13), 169(13 * 13) .... ) 10이하의 소수를 하드코딩하시는 것이 아닌, 다른 방식으로 접근하셔야 할 것 같습니다.
제가 볼때는 아마도 여는 괄호보다 닫는 괄호가 많을 때(정답이 "NO"인 경우), 런타임 예외가 발생하는 것 같아 보입니다. 닫는 괄호가 더 많을 경우에는 빈 스택(size = 0)일 때, pop을 더 하게 되는데, 빈 스택에서는 pop을 더 이상 할 수 없으므로 런타임 예외가 발생하는 것 같아요. for문 - else 부분 안에서, 바로 pop이 아니라 스택안에 원소가 있을 때, 없을 때 나누어 구현하시면 될 듯 합니다.