일단 n이 들어오면 범위를 정해야 한다. 범위는 이진수로 바꿨을 때(toString(2)
), 1의 개수가 같으면서(for문으로 검사) n보다 큰 모든 수들을 모아서 그 중에 최소값을 고른다!
고난 1. 15보다 큰 수를 하나씩 이진수로 바꿔서 검사하면서 1의 개수가 더 클 때 멈춰야 한다. --> 이진수라서 16부터 1의 개수가 다르다.(16은 이진수로 10000)
고난 2. 그러면 범위를 어떻게 정해야지? --> while 돌다가 가장 작은수!
내 머리에 있는 알고리즘을 그대로 코드로 나타냈더니 이렇게 길어졌다.
numberOfOneForTarget
: n을 이진수로 바꿔서 1의 수를 센다. 1을 검사하는 함수는 다시 쓰여야 하니까 따로 빼서 모듈화 한다.
while을 돌려서 정수 n보다 크면서 이진수로 바꿨을 때 1의 개수가 같은 수자를 찾는다. index를 올려서 하나씩 검사한다.
나의 초정밀 while 그물망에 걸린 수를 다시 정수로 바꾼다.
갑자기 찾아오는 현타
상위 호환
문제 보자마자 파파파팍 풀어서 천재인가 생각했는데 역시 세상은 호락호락하지 않음을 깨닫고 match
메서드를 좀 더 공부해야겠다.