본문 바로가기
알고리즘 & 자료구조/프로그래머스

숫자 블록

by 신재권 2023. 4. 6.
package programmers;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class 숫자_블록 {

   //숫자 0이 적힌 블록들이 설치된 도로에 다른 숫자가 적힌 블록들을 설치
   //블록에 적힌 번호가 n 일때, 가장 첫 블록은 n*2 번째 위치에 설치, 그 다음은 n*3, ... 위치에 설치
   //기존에 설치된 블록은 빼고 새로운 블록을 집어 넣는다.
   //블록은 1이 적힌 블록부터 숫자를 1씩 증가시키며 순서대로 설치한다.
   //1이 적힌 블록은 2,3,4,5 ...인 위치에 우선 설치
   //그 후, 2가 적힌 블록은 4,6,8,10,...인 위치에 설치

   public static int[] solution(long begin, long end) {
      int[] answer = new int[(int)(end - begin) + 1];

      for (int i = (int)begin,idx = 0; i <= end; i++) {
         answer[idx++] = getMaxDivisorExceptMe(i);
      }

      return answer;
   }


   private static int getMaxDivisorExceptMe(int x) {
      if (x == 1) {
         return 0;
      }

      List<Integer> l = new ArrayList<>();

      for (int i = 2; i <= Math.sqrt(x); i++) {
         if (x % i == 0) {
            l.add(i);
            if (x / i <= 10_000_000) {
               return x/i;
            }
         }
      }

      if (!l.isEmpty()) {
         return l.get(l.size() - 1);
      }

      return 1;
   }

   public static void main(String[] args) {
      System.out.println(Arrays.toString(solution(1, 10)));
      System.out.println(Arrays.toString(solution(2, 10)));
   }
}

'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글

연속된 부분 수열의 합  (0) 2023.04.08
디펜스 게임  (0) 2023.04.05
우박수열 정적분  (0) 2023.04.04
미로 탈출  (0) 2023.04.03
조이스틱  (0) 2023.03.31