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

n 진수 게임

by 신재권 2023. 1. 31.
package programmers;

public class n진수게임 {

   //1. 숫자를 0부터 차례대로 말한다. 첫번째 사람은 0, 두번째 사람은 1, ... 열번째 사람은 9
   //2. 10 이상의 숫자부터는 한자리씩 끊어서 말한다. 열한번째 사람은 10의 첫자리인 1, 열두번째 사람은 둘째 자리인 0

   // 2 <= 진법(n) <= 16
   // 0 < 미리 구할 숫자의 개수(t) <= 1,000
   // 2 <= 게임 참가 인원(m) <= 100
   // 1 <= 튜브의 순서(p) <= m

   private static String[] str = {"A", "B", "C", "D", "E", "F"};

   public static String solution(int n, int t, int m, int p) {
      String s = getArithmeticString(n, t, m);
      StringBuilder sb = new StringBuilder();

      int order = 1;
      for (int i = 0; i < s.length(); i++) {
         if (sb.length() == t)
            break;
         if (order > m) {
            order = 1;
         }
         if (order == p) {
            sb.append(s.charAt(i));
         }
         order++;
      }

      return sb.toString();
   }

   private static String getArithmeticString(int n, int t, int m) {
      StringBuilder sb = new StringBuilder("0");
      StringBuilder s;
      for (int i = 1; i <= t * m; i++) {
         s = new StringBuilder();
         int tmp = i;
         while (tmp > 0) {
            int x = tmp % n;
            if (x == 10) {
               s.append(str[0]);
            } else if (x == 11) {
               s.append(str[1]);
            } else if (x == 12) {
               s.append(str[2]);
            } else if (x == 13) {
               s.append(str[3]);
            } else if (x == 14) {
               s.append(str[4]);
            } else if (x == 15) {
               s.append(str[5]);
            } else {
               s.append(x);
            }
            tmp /= n;
         }

         sb.append(s.reverse());
      }

      return sb.toString();
   }

   public static void main(String[] args) {
      System.out.println(solution(2, 4, 2, 1).equals("0111"));
      System.out.println(solution(16, 16, 2, 1).equals("02468ACE11111111"));
      System.out.println(solution(16, 16, 2, 2));
   }
}

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

주식가격  (0) 2023.02.02
주차 요금 계산  (0) 2023.02.01
피로도  (0) 2023.01.29
더 맵게  (0) 2023.01.28
압축  (0) 2023.01.27