728x90
처음에 규칙을 어떻게 찾는지 헤맷다
처음에는 for문을 사용해서 앞자리를 1,2,3,4,...,n순으로 찾아내는 방식으로 하려고 햇는데
그보다 더 좋은 방법은 몫과 나머지를 이용하는 방법이었다.
중요한 것
k를 1개 빼주고(그래야 순서가 맞아떨어짐)
unit의 단위를 맞춰주고,
오름차순 정렬된 사람의 순서 List를 통해 index를 뽑아와서
answer배열에 넣어주어야 한다는 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | public int[] solution1(int n, long k) { int[] answer = new int[n]; if (n == 1) { answer[0] = 1; return answer; } k--; long unit = 1; for (long i = n - 1; i >= 1; i--) { unit *= i; } ArrayList<Integer> arrList = new ArrayList<>(); for (int i = 1; i <= n; i++) { arrList.add(i); } long mod = n - 1; int level = 0; Loop1: while (true) { // if(k==0) { // int personNum=1; // while(true){ // answer[level++]=personNum; // personNum++; // if(level==n) break Loop1; // } // } // System.out.println(k); // System.out.println(unit); // System.out.println(); int index = (int) (k / unit); answer[level++] = arrList.remove(index); if (arrList.size() == 0) break; k %= unit; unit /= mod--; } return answer; } | cs |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 하노이의 탑 (재귀함수) (0) | 2019.11.28 |
---|---|
프로그래머스 - 최고의 집합 (규칙찾기) (0) | 2019.11.28 |
프로그래머스 - 야근 지수 (구현?) (0) | 2019.11.28 |
프로그래머스 - 멀리 뛰기 (DP) (0) | 2019.11.28 |
4 ★★★ 프로그래머스 - 거스름돈 (DP) (2) | 2019.11.28 |