-
๊ทธ๋ ์ด ์ฝ๋๋ ์ฐ์๋ ์๋ฅผ ํ ๋นํธ๋ง ๋ค๋ฅด๊ฒ ์ธ์ฝ๋ฉ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฆ, ์๊ฐ ์ฆ๊ฐํ ๋, ์ธ์ ๊ฐ 1๊ฐ ๋นํธ๋ง ๋ฐ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ด์ง ๊ทธ๋ ์ด 0 000 000 1 001 001 2 010 011 3 011 010 4 100 110 5 101 111 6 110 101 7 111 100 ๊ทธ๋ ์ด ์ฝ๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฐ์ 1๋นํธ ๊ทธ๋ ์ด ์ฝ๋๋ฅผ ์ด๋ค.
0
1
๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋ ์ญ์์ผ๋ก ๋ค์ 1๋นํธ ๊ทธ๋ ์ด ์ฝ๋๋ฅผ ์ด๋ค.
0
1
1
0
์ ์์ผ๋ก ์ด ๋นํธ ์์๋ 0์, ์ญ์์ผ๋ก ์ด ๋นํธ ์์๋ 1์ ๋ถ์ฌ์ค๋ค.
00
01
11
10
์ด๋ ๊ฒ n๋นํธ ๊ทธ๋ ์ด ์ฝ๋๋ฅผ ์ด์ฉํ์ฌ n+1๋นํธ ๊ทธ๋ ์ด ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
์ฝ๊ฒ ์ ๋ฆฌํ์๋ฉด n๋นํธ ๊ทธ๋ ์ด ์ฝ๋๋ฅผ ์ ๊ณ ์์ 0์ ๋ถ์ธ ๊ฒ๊ณผ, n๋นํธ ๊ทธ๋ ์ด ์ฝ๋๋ฅผ ์ญ์์ผ๋ก ์ ๊ณ ์์ 1์ ๋ถ์ธ ๊ฒ์ ์ด์ผ๋ฉด n+1๋นํธ ๊ทธ๋ ์ด ์ฝ๋๊ฐ ๋๋ค.
์ฝ๋๋ ์์ง ์ดํด ๋ชปํ๊ฒ ๋คใ
#include <stdio.h> void print_gray_reverse(int code[], int n, int index); // ๊ทธ๋ ์ด ์ฝ๋ : ์ฐ์๋ ์๋ฅผ ํ ๋นํธ๋ง ๋ค๋ฅด๊ฒ ์ธ์ฝ๋ฉ ํ๋ ๋ฐฉ๋ฒ. //์ฆ, ๋ค์ ์๋ก ๋์ด๊ฐ ๋ ์ธ์ ๋ 1๊ฐ ๋นํธ๋ง ๋ฐ๋๋ค!! //n์ ์ ๋ ฅ ๋ฐ์์ n๋นํธ ๊ทธ๋ ์ด ์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ. void print_code(int code[], int len) { for (int i = 0; i < len; i++) { printf("%d", code[i]); } printf("\n"); } void print_gray(int* code, int n, int index) { if (n == index) { //๋ชฉํ์น์ ๋๋ฌํ๋ฉด ์ฝ๋ ์ถ๋ ฅ print_code(code, n); return; } //0๋นํธ ์๋ฆฌ ์ ๋ถํฐ ์์! code[index] = 0; print_gray(code, n, index + 1); code[index] = 1; print_gray_reverse(code, n, index + 1); } void print_gray_reverse(int code[], int n, int index) { if (index == n) { print_code(code, n); return; } code[index] = 1; print_gray(code, n, index + 1); code[index] = 0; print_gray_reverse(code, n, index + 1); } int main(void) { int code[20], n; scanf("%d", &n); //n์๋ฆฌ์(๋นํธ) print_gray(code, n, 0); }
Reference
https://johngrib.github.io/wiki/gray-code/
๋ฌธ์ ๋ก ํ์ด๋ณด๋ ์๊ณ ๋ฆฌ์ฆ(ํฉ์ธ์ฑ, ๊น์ฉํ)
'๐STUDY > Etc' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
RDPWrap ์๊ฒฉ ๋ฐ์คํฌํฑ ์ธ์ ๋ค์ค ์ ์ (0) 2022.03.02 Federated Learning ๋ด ๋ง๋๋ก ์ ๋ฆฌ (1) 2021.11.22 VMWare Ubuntu 16.07์์ ROS UVC_camera ์คํํ๊ธฐ (0) 2021.10.31 ์ดํญ ๊ณ์ ๋ด ๋ง๋๋ก ์ ๋ฆฌ(with ์ฌ๊ท) (0) 2020.02.27 python ์ ๊ท ํํ์ ๋ด๋ง๋๋ก ์ ๋ฆฌ (0) 2020.02.25 ๋๊ธ