ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
-10 ~ 10๋ฅผ ์ ํํ๋ฉด, ์ ํ๋ ์ซ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ S ๋ฐฐ์ด์ ์ ๋ณด๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋๋ค. ํด๋น ๋ฐฐ์ด ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ผ๋ฉด, ๊ทธ๋ฅผ ๋ฐํ์ผ๋ก ์์ด ๋ค๊ณผ ๋น๊ตํ์ฌ ๋ง์กฑํ๋ ์์ด์ ์ฐพ์ผ๋ฉด ๋๋ค. ๋ฌธ์ ์ ์์ ์ ๋ ฅ์ S๋ -+0++++--+๋ก ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
์ฒซ ํ์ ์ ๋ณด(i == 0)๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ํ๋ธ๋ค.
-
j == 0
- (0, 0) < 0
-
j == 1
- (0, 0) + (0, 1) > 0
-
j == 2
- (0, 0) + (0, 1) + (0, 2) == 0
-
j == 3
- (0, 0) + (0, 1) + (0, 2) + (0, 3) > 0
๋ ๋ฒ์งธ ํ์ ์ ๋ณด๋ i == 1 ๋ถํฐ ๊ฐ ์๋ฆฌ ์ซ์์ ํฉ์ด + + + ์ ๋ง์กฑํ๋ ์๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ๋ง์กฑํ๋ ์์ด์ ์ ๋ ฅ๊ฐ์ ํตํด ๋ฐํํ๋ฉด ๋๋ค. ๋ํ ์ฌ๋ฌ ๊ฐ์ ๋ต์ ์ฐพ์ ๊ฒฝ์ฐ ์๋ฌด๊ฑฐ๋ ๋ฐํํ๋ฉด ๋๋ฏ๋ก, ํ๋๋ผ๋ ์ฐพ๊ฒ ๋๋ค๋ฉด ๋ฐํํ๊ณ ์ข ๋ฃํ๋ฉด ๋๋ค.
์ฝ๋
def available(idx):
sum_num = 0
for i in range(idx, -1, -1):
sum_num += check[i]
if s[i][idx] == '+' and sum_num <= 0:
return False
if s[i][idx] == '-' and sum_num >= 0:
return False
if s[i][idx] == '0' and sum_num != 0:
return False
return True
def dfs(depth):
if depth == n:
print(*check)
exit(0)
for i in range(-10, 11):
check[depth] = i
if available(depth):
dfs(depth + 1)
check[depth] = -11
if __name__ == "__main__":
n = int(input())
s = [[0] * n for _ in range(n)]
input_s = list(input())
check, k = [-11] * n, 0
for i in range(n):
for j in range(i, n):
s[i][j] = input_s[k]
k += 1
dfs(0)
Python3๋ก ์ ์ถํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์ฌ PyPy3๋ก ์ ์ถํ์ฌ ํต๊ณผํ์๋ค. ๋ค๋ฅธ ์ธ์ด๋ ํด๋น ๋ก์ง์ผ๋ก ํต๊ณผํ๋ ๊ฒ์ ๋ณด์.. ํ์ด์ฌ์ด ๋๋ฆฌ๋ค๋ ์๊ธฐ ํฉ๋ฆฌํ๋ฅผ ํ๋ค...๐
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 11724 ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2020.07.20 |
---|---|
๋ฐฑ์ค: 1260 DFS์ BFS (0) | 2020.07.20 |
๋ฐฑ์ค: 2529 ๋ถ๋ฑํธ (0) | 2020.07.18 |
๋ฐฑ์ค: 14889 ์คํํธ์ ๋งํฌ (0) | 2020.07.17 |
๋ฐฑ์ค: 1759 ์ํธ ๋ง๋ค๊ธฐ (0) | 2020.07.17 |