Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions YoonYn9915/dp/2025-04-10-[백준]-#10844-쉬운 계단 수.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

N = int(input())

dp = [[0] * 10 for _ in range(N + 1)]

for i in range(1, 10):
dp[1][i] = 1

for i in range(2, N + 1):
for j in range(10):
if j == 0:
dp[i][j] = dp[i - 1][1]
elif 1 <= j <= 8:
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1]
else:
dp[i][j] = dp[i - 1][8]


print(sum(dp[N]) % 1000000000)
26 changes: 26 additions & 0 deletions YoonYn9915/dp/2025-04-12-[백준]-#1562-계단 수.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import sys

input = sys.stdin.readline

N = int(input())
dp = [[[0 for _ in range(1 << 10)] for _ in range(10)] for _ in range(N)]
mod = 1000000000
res = 0

for k in range(1, 10):
dp[0][k][1 << k] = 1

for i in range(1, N):
for k in range(10):
for bit in range(1024):
if k - 1 >= 0:
dp[i][k][bit | (1 << k)] += dp[i - 1][k - 1][bit]
if k + 1 <= 9:
dp[i][k][bit | (1 << k)] += dp[i - 1][k + 1][bit]
dp[i][k][bit | (1 << k)] %= mod
Comment on lines +16 to +20
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분이 제 코드랑 다른 부분인 것 같네요!! else 부분 없이 조건을 이렇게 둬도 된다는 점을 배워갑니다!

# n: N번째 수
for n in range(2, N+1):
		# last_digit: 마지막 자리 숫자  
    for last_digit in range(10):
        # 0~9까지 모든 수를 방문해야 한다는 조건이 있으므로 방문여부를 비트마스킹을 통해 저장
        for mask in range(1024):
            if last_digit == 0:
                dp[n][last_digit][mask | (1 << last_digit)] += dp[n - 1][last_digit + 1][mask]
            elif last_digit == 9:
                dp[n][last_digit][mask | (1 << last_digit)] += dp[n - 1][last_digit - 1][mask]
            else:
                dp[n][last_digit][mask | (1 << last_digit)] += (
                        dp[n - 1][last_digit - 1][mask] + dp[n - 1][last_digit + 1][mask]
                )
            dp[n][last_digit][mask | (1 << last_digit)] %= MOD


for k in range(10):
res += dp[N - 1][k][1023]
res %= mod

print(res)
45 changes: 45 additions & 0 deletions YoonYn9915/recursion/2025-04-10-[백준]-#1780-종이의 개수.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@

import sys

def recursion(paper, row_start, col_start, step):
# 종이가 같은지 검사
result = check_paper_same(paper, row_start, col_start, step)

# 같지 않다면 9분할한뒤 각각을 재귀적으로 검사
if result == 2:
for i in range(3):
for j in range(3):
row = row_start + (i * step // 3)
col = col_start + (j * step // 3)
recursion(paper, row, col, step // 3)
else:
# 종이의 칸이 다 같은 경우
answer[result] += 1



def check_paper_same(paper, row_start, col_start, step):
base = paper[row_start][col_start]
for i in range(row_start, row_start + step):
for j in range(col_start, col_start + step):
if paper[i][j] != base:
return 2
return base


inp = sys.stdin.readline

n = int(inp())

paper = []

# 각각 -1, 0, 1로만 이루어진 종이의 개수 저장 튜플
global answer
answer = {-1: 0, 0: 0, 1: 0}

for i in range(n):
paper.append(list(map(int, inp().split())))

recursion(paper, 0, 0, n)

print('\n'.join(str(value) for value in answer.values()))