Skip to content

CLOCKSYNC

zaeval edited this page Dec 29, 2019 · 3 revisions

회고

zaeval

  • 4번누르면 다시 원점으로 돌아오는 성질을 이용하여 줄일 수 있었던 로직

before

for (int count = 0; count < nowCount; ++count) {
        int clock = 0;

	while (SWITCH[switchNum][clock] != -1) {
		clocks[SWITCH[switchNum][clock]] += 3;
		clock++;
	}
}

...


for (int count = 0; count < nowCount; ++count) {
	int clock = 0;
	while (SWITCH[switchNum][clock] != -1) {
		clocks[SWITCH[switchNum][clock]] -= 3;
		clock++;
	}
}

after

for (int count = 0; count < 4; ++count) {
        answer = min(count + solve(switchNum + 1, clocks),answer);
        int clock = 0;

        while (SWITCH[switchNum][clock] != -1) {
            clocks[SWITCH[switchNum][clock]] += 3;
            clock++;
        }
}
  • 이미 count만큼 돌리고 있는 반복문이 있기때문에 3배의 연산작업을 하던 기존의 소스를 책에서는 다음과 같이 이미 돌리고 있는 반복문에 갱신 소스를 넣었다.

  • 또한 count의 합 역시 계속 하위 노드로 내려주는 형식이 아닌 올라오면서 이전 카운트의 최소를 선택해서 합해서 올리는 방식으로 하여 파라미터를 간단히 하고 파라미터의 연산 속도를 줄였다.

Clone this wiki locally