문제를 이해한 뒤 알고리즘은 정말 쉽게 구성했지만,
문제해석이 가장 어려운 부분이었다;; (영어실력향상이 절실;;)
각각의 0, 1은 하나의 snapper라고 하고, 1은 ON, 0은 OFF를 의미한다.
k=1 : 1000
k=2 : 0100
k=3 : 1100
k=4 : 0010
k=5 : 1010
k=6 : 0110
k=7 : 1110
k=8 : 0001
....
패턴이 보이는가?
k의 bit 표현 패턴이다.. 단 문제는 앞에서 부터 시작한다는 것(이건 큰문제 되지않는다)과 앞에서부터 연속되어야 한다. 왜냐하면 Electronic flow가 전원부터 N번째 snapper까지 연결되어 있어야 하기때문에 처음부터 N번째까지 모두 ON이 되어 있어야 한다.
이하 소스코드
//진수 변환 int tmp = K; for(int i=0; tmp>0; i++) { bit[i] = tmp%2; tmp /= 2; } // 앞에서부터 연속된 비트만 허용 : electronic flow for(int i=1; i<30; i++) { if(bit[i-1]==0) bit[i]=0; }
댓글 없음:
댓글 쓰기