본문 바로가기

전체 글

(117)
기본 이론 3 이번 글에서는 인접행렬의 거듭제곱에 대해 다루겠습니다. 인접행렬, adjacency matrix는 graph를 matrix로 나타낸 것입니다. 어떤 matrix $A$ 가 graph $G$ 의 adjacency matrix라는 것은 일반적으로 다음을 의미합니다. $G$의 임의의 두 vertices $i$ 에서 $j$ 로의 edge가 존재하면 $A_{ij}$ 의 값이 1, 그렇지 않으면 0 Adjacency matrix로 edge가 directed인 경우, weighted인 경우도 표현할 수 있습니다. directed가 아니면 $A_{ij}=A_{ji}=1$ 임이 자명합니다. 즉, $A_{ij} \ne A_{ji}$라면 directed graph일 것입니다. weighted의 표현은 간단하게 그 edge의..
백준 14860번: GCD 곱 https://www.acmicpc.net/problem/14860 14860번: GCD 곱 N과 M 이 주어졌을 때, GCD(1, 1) × GCD(1, 2) × ... × GCD(1, M) × GCD(2, 1) × GCD(2, 2) × ... × GCD(2, M) × ... × GCD(N, 1) × GCD(N, 2) × ... × GCD(N, M)을 구하는 프로그램을 작성하시오. www.acmicpc.net $GCD\left ( 1,1 \right)\times \cdots \times GCD\left ( N,M \right)$ 을 구하는 문제입니다. $N\;,\;M$ 의 범위를 살펴보니, 위 식을 소인수분해하는 게 가능할 것 같습니다. 그러면 eratosthenes' sieve로 15000000 이하의..
백준 3827번: 일차원 세포 자동자 https://www.acmicpc.net/problem/3827 3827번: 일차원 세포 자동자 각 테스트 케이스에 대해서, 시간 T에서 세포의 상태를 출력한다. 출력은 다음과 같은 형식이다. S(0,T) S(1,T) ... S(N-1,T) 각 세포의 상태는 정수이고, 공백으로 구분되어야 한다. www.acmicpc.net 지문에서 설명하는 점화식을 그대로 행렬로 표현해주면 됩니다. $S\left( i,t+1 \right)=A\times S\left( i-1,t \right)+B\times S\left( i,t \right)+C\times S\left( i+1,t \right)$ 이 점화식에서 $i=0$ 일 때, $i=N-1$ 일 때만 잠시 생각해보면, $S\left( 0,t+1 \right)=B\ti..
백준 13173번: Ω https://www.acmicpc.net/problem/13173 13173번: Ω 놀이가 끝났을 때의 숫자가 N 일 확률을 출력한다. 정확한 판별을 위해, 답을 기약분수로 나타내었을 때 a/b가 된다면, (a × b-1) mod 1,000,000,007을 대신 출력하도록 한다. b-1은 b의 모듈러 곱셈에 대 www.acmicpc.net 문제를 관찰하면, 뭔가 복잡한 확률을 구해야 할 것 같습니다. 그리고, 출력 파트를 보면, 약분을 하여 분모가 1이 되지 않으면 $a\times b^{-1}$ 을 출력하라고 합니다. 중요한 건, 사실 약분 안 해도 됩니다. $a\times b^{-1}=a\times \left ( 2\times 2^{-1} \right ) \times b^{-1}=\cdots$ 위와 ..
백준 15999번: 뒤집기 https://www.acmicpc.net/problem/15999 15999번: 뒤집기 첫 줄에 격자의 초기 상태로 가능한 경우의 수를 1,000,000,007(109 + 7)로 나눈 나머지를 출력한다. www.acmicpc.net 이 문제는 카카오 코드 페스티벌 2018이 출처이고, 카카오 테크 블로그에 간략한 증명과 해설이 나와 있습니다. 그대로 구현하면 정답을 받을 수 있습니다. ( 코드 페스티벌 2018 카카오 본선 이야기 ) 전체적인 코드에서 그나마 주목할 만한 점은 한 칸에서 인접한 칸들의 상태를 검사해주는 부분입니다. 이 부분은 뭔가 더 최적화할 여지가 없을까 싶었는데 코드가 장황해서 잘 눈에 안 들어오고 쉽지 않네요. 예외 처리를 하는 부분만 본다면, 우선 $N=1$ 일 때와 $M=1$ ..
백준 13976번: 타일 채우기 2 https://www.acmicpc.net/problem/13976 13976번: 타일 채우기 2 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000,000,000,000)이 주어진다. www.acmicpc.net 타일 채우기라고 부르는 유형은 풀이법이 어느정도는 정해져 있습니다. 보통 점화식을 구해야하는데, 그 과정에서, 다음 과정을 거칩니다. 작은 $N$ 값에 대해 답을 구해봅니다 적당히 큰 값의 $X$ 에 대해서, 가로로 $X$ 만큼의 크기(이 문제에서는 $3\;by\;X$ )를 얻었다고 칩니다 그 다음 $X+1$ , $X+2$ , 로 확장해가면서 점화식을 추론합니다 이 글에서도 위와 같은 과정을 거칠 것입니다. 우선 $N=2$ 일 때, 답은 3입니다. 다음과 같은 경우의 수가 있습니다. $N=4..
백준 12446번: バクテリアの増殖 (Large) https://www.acmicpc.net/problem/12446 12446번: バクテリアの増殖 (Large) 微生物の研究者であるパスカルは、特殊な増殖の傾向を示すバクテリアを発見した。どうやらそのバクテリアは、ある時点で x 個存在したとすると、理想的な環境下では1時間後に xx 個に増 www.acmicpc.net 이전 포스팅에서 다뤘던 문제의 Large 버전입니다. ( 12445번: バクテリアの増殖 (Small) ) 따로 더 필요한 논리는 없습니다. 수열 $\left \{ X_{n} \right \}$ 을 다음과 같이 정의합니다. $X_{0}=A$ $X_{k}=\left ( X_{k-1} \right )^{X_{k-1}}$ 구해야하는 건 마찬가지로 $X_{B}\;\; mod\;\; C$ 입니다. 그런데 $B$ 값이..
백준 12445번: バクテリアの増殖 (Small) https://www.acmicpc.net/problem/12445 12445번: バクテリアの増殖 (Small) 微生物の研究者であるパスカルは、特殊な増殖の傾向を示すバクテリアを発見した。どうやらそのバクテリアは、ある時点で x 個存在したとすると、理想的な環境下では1時間後に xx 個に増 www.acmicpc.net 번역기를 돌려보면 대충 문제가 말하는 것을 파악할 수 있습니다. 초기의 박테리아의 수는 문제에서 주어지는 인풋인 $A$ 이니까, 수열 $\left \{ X_{N} \right \}$ 을 이렇게 정의합시다. $X_{0}=A$ $X_{k}=\left ( X_{k-1} \right )^{X_{k-1}}$ (단, $1\leq k$ ) 우리는 $B$ 를 인풋받아 $X_{B}$ mod $C$ 를 구해야 합니다. 이 ..