import sys
sys.stdin = open("input.txt")
T = int(input())
for tc in range(1, T+1):
inp_arr = list(map(int, list(input())))
all_case = []
tmp_case = [0] * len(inp_arr)
isSelected = [0] * len(inp_arr)
# 케이스 만들어서 돌리기
def make_case(n):
if n == len(inp_arr):
if check(tmp_case):
if tmp_case not in all_case: # 이 조건은 사실 없어도됨
all_case.append(list(tmp_case))
return
for i in range(len(inp_arr)):
if not isSelected[i]:
tmp_case[n] = inp_arr[i]
isSelected[i] = 1
make_case(n + 1)
isSelected[i] = 0
# 케이스 확인
def check(inp_arr):
check1 = False
check2 = False
if inp_arr[0] == inp_arr[1] and inp_arr[1] == inp_arr[2]:
check1 = True
if inp_arr[3] == inp_arr[4] and inp_arr[4] == inp_arr[5]:
check2 = True
if inp_arr[0] + 1 == inp_arr[1] and inp_arr[1] + 1 == inp_arr[2]:
check1 = True
if inp_arr[3] + 1 == inp_arr[4] and inp_arr[4] + 1 == inp_arr[5]:
check2 = True
return check1 and check2
make_case(0)
# print(all_case)
result = 1 if all_case else 0
print("#{} {}".format(tc, result))
먼저 풀이와 다른것
- 이 방법은 완전탐색이 아니기 때문에 걸리는 시간이 굉장히 짧게 걸리고 메모리도 훨씬 적게씀
import sys
sys.stdin = open("input.txt")
T = int(input())
for tc in range(1, T+1):
num = int(input()) # Baby Gin 확인할 6자리 수
c = [0]* 12 # 6자리 수로부터 각 자리수를 추출하여 개수를 누적할 리스트 ( 하단에 i+2 때문에 11자리까지 생성)
for i in range(6) :
c[num % 10] += 1
num //=10
i = 0
tri = run =0
while i < 10 :
if c[i] >= 3 : # triplet 조사후 데이터 삭제
c[i] -= 3
tri +=1
continue
if c[i] >=1 and c[i+1] >=1 and c[i+2] >=1 : #run 조사후 데이터 삭제
c[i] -=1
c[i+1] -=1
c[i+2] -=1
run +=1
continue
i+=1
if run + tri == 2 :
result = 1
else :
result =0
print("#{} {}".format(tc, result))