본문 바로가기
algorithm/hackerRank

[HackerRank] New Year Chaos

by 무대포 개발자 2018. 10. 11.
728x90
반응형

1. Problem

2. Feedback

  • 못풀음. 힌트 보고 풀음.
  • 규칙
    • bribe 는 한 사람이 최대 2번 까지 가능
    • 앞에 있는 얘는 뒤에 있는 얘한테 bribe 를 못 줌.
  • Brute force 로 풀어볼려는데, Swap 해서 규칙을 찾아서 프로그래밍화 하는 방법을 못찾음.
  • 입력 받은 상태를 초기 상태로 변환하는 방법으로 풀음.
  • 최대 2번 바꿀 수 있으며, 초기상태는 오름차순이기에, 끝에서부터 최대 index 2 이내의 값이, 앞의 값이 뒤에 값보다 작다. 또한, 앞의 값이 뒤에 값보다 크다는 것은 swap 한다는 의미이며, ans++ 를 해준다.
  • 여기서 내가 잘못 생각한 것은 최소 값을 구하라는 것에서 여러 조합이 나올 수 있다 생각한 것. 여러 조합이 나올 수 없음. 2번 이내로 변경해야하니.
  • 이런 문제를 풀 때, 반드시 for 문을 통해 어떻게 규칙화할 것인지 생각해야 함.

3. Source

public static void main(String [] args)
 {
  Scanner in = new Scanner(System.in);
  int t = in.nextInt();
  
  for (int i = 0 ; i < t ; i++)
  {
   int n = in.nextInt();
   int arr[] = new int[n];
   for (int j = 0 ; j < n ; j++)
   {
    arr[j] = in.nextInt();
   }
   int ans = solve(arr);
   if (ans == 0)
    System.out.println("Too chaotic");
   else
    System.out.println(ans);
  }
 }
 
 public static int solve(int arr[])
 {
  int ans = 0;
  for (int i = arr.length - 1 ; i >= 0 ; i--)
  {
   if (arr[i] - (i + 1) > 2)
   {
    return 0;
   }
   for (int j = Math.max(0, arr[i] - 2) ; j < i ; j++)
   {
    if (arr[j] > arr[i]) ans++;
   }
  }
  return ans;
 }

'algorithm > hackerRank' 카테고리의 다른 글

[HackkerRank] Sherlock and Anagrams  (0) 2018.10.12
[HackerRank] Minimum Swap2  (0) 2018.10.11
[HackerRank] Sock Merchant  (0) 2018.10.11
[HackerRank] Organizing Containers of Balls  (0) 2018.07.12
[HackerRank] Forming a Magic Square  (0) 2018.07.03

댓글