😢 666, 1666, ..., 9666의 모습만 보면 안되고, 그 이상의 숫자를 예측해봐야 한다.
😊 다음과 같은 로직으로 문제를 해결했다. 1. 첫 번째 종말의 숫자는 666 이므로 665부터 숫자를 계속 증가시킨다. 2. 만약 증가시킨 숫자에 연속된 666이 포함된다? 그러면 input으로 받은 숫자를 1개만큼 줄인다. 3. input이 0이되면 증가를 중단하고 출력해준다.
😊 일단, 다른 풀이를 참고하여 단순하게 풀어봤다. 맨 왼쪽 위칸이 'W'일 때 또는 'B'일 때, 8*8체스판을 미리 작성해두었다. 그리고 입력받은 체스판 크기만큼 8*8씩 잘라서 반복적으로 비교하여 모든 경우의 수를 저장했다. 최종적으로 Math.min()을 이용해 최솟값을 출력해주었다.
😊 브루트 포스로 1부터 생성자가 있는 숫자들을 구해주고( d(n) ), N의 생성자가 여러 개라면 배열에 넣어준다. 최종적으로 생성자가 있다면 Math.min을 이용해 최솟값을 출력해주고, 없다면 0을 출력해주면 된다. 각 자릿수를 합하는 것은 위의 셀프넘버를 참고하면 된다.
참고로, 속도는 while로 자릿수를 나누는 게 더 빠르다(Full Code의 2nd Solution code 참고)
😊 JavaScript built-in method인 sort()를 사용해주면 된다. 문자를 정렬할 때는 sort()를 그냥 써줘도 되지만, 숫자를 정렬할 때는 sort((a, b) => a-b); 로 써줘야 한다. 난 for ... of를 사용하고 좋아하지만, 속도(?)와 참고하는 사람들 때문에 정석 버전으로 캡쳐했다.
😊 1. 원이 두 점에서 만나는 경우 (2)( r2 - r1 < d < r1 + r2) 2. 두 원이 외접하는 경우 (1)( d === r1 + r2 ) 3. 두 원이 내접하는 경우 (1)( d === r2 - r1 && d !== 0 ) 4. 한 원이 다른 원을 포함하는 경우 (0)( d < r2 - r1 ) 5. 두 원이 떨어져 만나지 않는 경우 (0)( d > r1 + r2 ) 6. 두 원이 일치하는 경우 (-1)( d === 0, r1 === r2 )