알고리즘 - 다음 큰 숫자

dongha1992·2021년 1월 31일
0

알고리즘

목록 보기
26/42
  • 문제

  • 번뜩이는 내 생각

일단 n이 들어오면 범위를 정해야 한다. 범위는 이진수로 바꿨을 때(toString(2)), 1의 개수가 같으면서(for문으로 검사) n보다 큰 모든 수들을 모아서 그 중에 최소값을 고른다!

  • 시작

고난 1. 15보다 큰 수를 하나씩 이진수로 바꿔서 검사하면서 1의 개수가 더 클 때 멈춰야 한다. --> 이진수라서 16부터 1의 개수가 다르다.(16은 이진수로 10000)

고난 2. 그러면 범위를 어떻게 정해야지? --> while 돌다가 가장 작은수!

  • 내 풀이

내 머리에 있는 알고리즘을 그대로 코드로 나타냈더니 이렇게 길어졌다.

  1. numberOfOneForTarget : n을 이진수로 바꿔서 1의 수를 센다. 1을 검사하는 함수는 다시 쓰여야 하니까 따로 빼서 모듈화 한다.

  2. while을 돌려서 정수 n보다 크면서 이진수로 바꿨을 때 1의 개수가 같은 수자를 찾는다. index를 올려서 하나씩 검사한다.

  3. 나의 초정밀 while 그물망에 걸린 수를 다시 정수로 바꾼다.

  • 다른 사람 풀이

갑자기 찾아오는 현타

상위 호환

  • 느낀점

문제 보자마자 파파파팍 풀어서 천재인가 생각했는데 역시 세상은 호락호락하지 않음을 깨닫고 match 메서드를 좀 더 공부해야겠다.

profile
글과 코드와 사람에 관해 생각합니다.

0개의 댓글