u = u[1:-1]
#똑똑이(solution2)풀이는 lambda를 이용해서 한줄로
new_u = ''
for c in u :
if c == '(':
new_u += ')'
else:
new_u += '('
u = new_u
list(map(lambda x:'(' if x==')' else ')',p[1:i])))
permutation으로 해줬다.
set을 안하면 통과 x인데
set 하면 통과
재귀로 풀었을 때랑 시간차이가 5배 정도 난다
def dfs(i, now):
print("=============")
global min_value, max_value, add, sub, mul, div
print(i, add, sub, mul, div)
if i == n:
min_value = min(min_value, now)
max_value = max(max_value, now)
else:
if add > 0 :
add -= 1
dfs(i+1, now + data[i])
add += 1
if sub > 0 :
sub -= 1
dfs(i+1, now - data[i])
sub += 1
if mul > 0:
mul -= 1
dfs(i+1, now * data[i])
mul += 1
if div > 0:
div -= 1
dfs(i+1, now // data[i])
div += 1
전역변수일 경우,
한 depth 들어갈때(Depth1) 복사본을 저장합니다. (데이터가 map1이라고 하겠습니다.)
다음 depth 들어갈때(Depth2) 또 복사본을 저장하고 (map2) 나올때 복원하면 전역변수에 저장된 map2가 복원됩니다.
depth1으로 나와서 다시 return 될때에는 전역변수의 값으로 복원할텐데 이미 Depth2에서 map2로 덮어써졌기 때문에
다시 복원된 결과가 map2가 됩니다.
https://www.acmicpc.net/board/view/19295
https://stackoverflow.com/questions/653509/breaking-out-of-nested-loops
for x in xrange(10):
for y in xrange(10):
print x*y
if x*y > 50:
break
else:
continue # only executed if the inner loop did NOT break
break # only executed if the inner loop DID break
일단 시간을 줄이는 방법에서 2가지가 있었다.
1. for문을 2번씩 while문으로 도는 것이 아니라 추가할 친구들만 넣어주는 것. 이번 초에서 변경이 안된 친구들은 다음판에 굳이 확인할 필요가 없다.
그런데 중요했던 건, 이 visited를 언제 처리해줄지에 따라서 답이 달랐다.
와 너무 오래걸렸어. 파이썬 푼 방법으로 풀면 안풀리고 그냥 동빈북 풀이 응용해서 풀었다. 파이썬 풀이는 도대체 왜 자바에서 안되는 것일까