해당 문제는 Softeer에서 풀어볼 수 있기에 문제 설명은 생략하겠습니다.
이런 괄호 수식 문제들을 많이 풀어봤을때 수식이 올바른지를 물어보는 문제들이 대부분이었는데 수식을 완성하라고해서 조금 당황했습니다.
해당 문제의 경우 어떠한 수식이 오더라도 정답으로 인정해주므로 올바른 수식이면서 가장 간단한 수식만을 구현하면 됐습니다.
이론 자체는 어렵지 않으므로 빠르게 정답 코드로 넘어가겠습니다.
import sys
print(sys.stdin.readline().strip().replace("()", "(1)").replace(")(", ")+("))
그런데 이 때 한가지 궁금증이 생겼습니다.
바로 저 '가능한 수식이 여러가지인 경우, 그중 아무거나 하나를 출력한다.'
저 '아무거나' 문구 하나로 저는 이 문제에 대한 테스트케이스를 작성할 때 그럼 정답코드를 여러개 두고 비교처리한다는건데 정말 아무거나 일지 테스트 해보고 싶었습니다.
그렇게 아래 코드를 만들었습니다.
동작은 똑같으며 사실 replace 로 처리해도 되지만 다양한 처리를 해보려고 만들었습니다.
import sys
s = sys.stdin.readline().rstrip()
pre_w = '('
lst = [pre_w]
for i in range(1, len(s)):
w = s[i]
if w != pre_w:
if pre_w == '(':
lst.append('1')
else:
lst.append('+')
elif w == ')' and pre_w == ')':
lst.append('+1')
lst.append(w)
pre_w = w
print("".join(lst))
반대쪽도 안해볼 수 없죠?
import sys
s = sys.stdin.readline().rstrip()
pre_w = '('
lst = [pre_w]
for i in range(1, len(s)):
w = s[i]
if w != pre_w:
if pre_w == '(':
lst.append('1')
else:
lst.append('+')
elif w == '(' and pre_w == '(':
lst.append('1+')
lst.append(w)
pre_w = w
print("".join(lst))
길이를 늘려 [1+] -> [1+1+] 로 진행한 결과 최대 길이인 500,000 글자수를 넘어서서 오답처리가 되는 것 같았습니다.
중간에 값도 넣어보았지만 정말 500,000 글자 수를 넘지 않는다면 어떻게 수식을 배치해도 통과하였습니다.
500,000 글자수를 넘기 전까지 정답 테케를 작성해 비교하는 것 같은데 '굳이? 그냥 가장 짧은 정답 코드 하나로 처리하게 했으면..?' 라는 생각도 들지만 재미있었습니다.