- κ·μΉμ±μ κΈ°λ°μΌλ‘ μμ±λλ λ°μ΄ν°μ νΉμ μμΉ κ°μ μμλ΄λ λ¬Έμ .
- 첫λ²μ§Έ rowλ
0
κ°μ κ°μ§λ©° λλ²μ¨° λΆν°λ 0 β 01
, 1 β 10
μΌλ‘ λ체νλ λ°©μμΌλ‘ λ€μ rowλ₯Ό μμ±νλ€.
- μ²μ 5κ°μ rowλ₯Ό λμ΄ν΄λ³΄λ©΄ μλμ κ°λ€.
["0", "01", "0110", "01101001", "0110100110010110"]
- μ¬κΈ°μ μ μ μλ κ·μΉμ λ€μκ³Ό κ°λ€.
- rowμ λ²νΈ
n
μλ κ΄κ³μμ΄ k
λ²μ§Έ symbolμ΄ μ ν΄μ§λ€. n
μ λ¨μμ΄ k
κ°μ λ²μλ₯Ό μ νν λΏμ΄λ€."0110"
μ΄λΌλ ν¨ν΄μ΄ μ¬κ·μ μΌλ‘ λ°λ³΅λλ€.
(1) k = ~ 4^1
pattern: "0110"
sub pattern: "0" β "0", "1" β "1"
(2) k = ~ 4^2
pattern: "0110 1001 1001 0110"
sub pattern: "0" β "0110", "1" β "1001"
(3) k = ~ 4^3
pattern: "0110100110010110 1001011001101001 1001011001101001 0110100110010110"
sub pattern: "0" β "0110100110010110", "1" β "1001011001101001"
μμ κ·μΉμ μ΄ν΄λ³΄λ©΄ ν¨ν΄μ 0
μ ν΄λΉλλ κ²½μ° μλΈ ν¨ν΄μ κ°μ΄ μ μ§λλ©° 1
μ ν΄λΉλλ κ²½μ° μλΈ ν¨ν΄μ κ°μ λ°μ νλ ννλ‘ κ΅¬μ±λ¨μ μ μ μλ€.- κ·μΉμ λ°νμΌλ‘ μκ°ν΄λ³΄λ©΄ λ€μκ³Ό κ°μ λ‘μ§μ μ»μ μ μλ€.
- ν¨ν΄
PATTERN
μ μ μνλ€. k
κ°μ 0-base
λ‘ λ³κ²½νλ€ --k
- LSB 2 bitλ₯Ό κΈ°μ€μΌλ‘ μ΅μ΄ ν¨ν΄μμμ κ°
PATTERN[k % 4]
μ μ°Ύκ³ bitλ₯Ό shift k >>= 2
νλ€. - kκ°μ΄ 0μ΄ λκΈ° μ κΉμ§ λ€μμ λ°λ³΅νλ€.
- LSB 2 bitλ₯Ό κΈ°μ€μΌλ‘ μ΅μ΄ ν¨ν΄μμμ κ°
PATTERN[k % 4]
μ μ°Ύλλ€. - ν΄λΉ κ°μ΄ 0μ΄λ©΄ νμ¬ κ°μ μ μ§νκ³ 1μ΄λ©΄ κ°μ λ°μ
0 β 1, 1 β 0
νλ€.
class Solution {
public:
const vector<int> PATTERN = {0, 1, 1, 0};
int kthGrammar(int n, int k) {
--k;
int result = PATTERN[k % 4];
k >>= 2;
while (k > 0) {
if (PATTERN[k % 4] == 1)
result = result == 0? 1 : 0;
k >>= 2;
}
return result;
}
};