말하는 컴공감자의 텃밭

Sw expert - 1208.Flatten <D3> - 자바 java 본문

알고리즘/SW expert - Java

Sw expert - 1208.Flatten <D3> - 자바 java

현콩 2023. 8. 6. 13:53
728x90
가장 높은곳에서 블럭을 옮겨, 낮은 곳으로 옮기는 문제이다.
최종적으로는 정해진 횟수만큼 움직여서 가장 높은곳과 낮은곳의 차이점을 출력하면 되는 문제다.
  

A가 최고점이므로, B로 이동.

 

A가 최고점이므로 C에 이동, C`에 이동해도 무방하다.

 

가로는 100으로 고정되어 있으며, 10번의 tc가 주어진다. 점프 회수는 1~1000이고, 모두 동등해지면 더이상의 평탄화는 불가능하므로, 그때 상황에 따라 1또는 0을 출력한다.

ex) 666766 의 경우 7이 높긴하나 더 옮길 수 없으므로 1 출력.

 

보자마자 단순 구현이라는 생각이 들었고, 가장 높은곳은 -1, 낮은곳은 +1 * 주어진 횟수로 풀었다.

 

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
 
import java.util.*;
 
class Solution
{
    public static void main(String args[]) throws Exception
    {
 
          Scanner sc = new Scanner(System.in);
            for(int i = 0; i<10; i++) {         //10 tc
                int N = sc.nextInt();
                int [] arr = new int [100];
                for(int k = 0; k < 100; k++) {  // 가로길이 100       
                    arr[k]= sc.nextInt();               
                }
              //logic
                for(int k = 0; k < N; k++) {
                    Arrays.sort(arr);            // 먼저 정렬 후
                    if(arr[0== arr[arr.length-1&& arr[1== arr[arr.length-2]) { 
                        // 평탄하다면 break;
                        break;
                    }else {
                        arr[0++;                //최저점 +1
                        arr[arr.length-1--;    //최고점 -1
                    }
                }
                Arrays.sort(arr);                // 정렬 후 출력.
                  int answer = arr[arr.length-1]-arr[0];
                  
                  //output
                System.out.printf("#%d %d\n",i+1,answer); 
            }sc.close();
    }
}
cs

 

간단쓰.. 이런건 너무 좋자나

728x90
Comments