본문 바로가기
Coding Test/SWEA 풀이

[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten : D3 (java)

by CSEGR 2024. 11. 15.
728x90

✔️ 문제 설명

 

 

✔️ 문제 풀이

요구 사항 : 가장 높은 상자를 가장 낮은 상자로 옮긴다.

 

1. 배열을 오름차순으로 정렬한다.

Arrays.sort(arr);

2. 가장 큰 수(arr[99])의 상자를 가장 작은 수(arr[0])으로 옮긴다. 

arr[99] --;
arr[0] ++;
Arrays.sort(arr);

 

 

최종 코드

import  java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays; 

class Solution
{
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        for(int i = 0; i<10; i++){
            int cnt = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] arr = new int[100];
            Arrays.fill(arr,0);
            for(int j = 0; j <100; j ++){
                arr[j] = Integer.parseInt(st.nextToken());
            }
            for(int j = 0; j< cnt; j++){
            	Arrays.sort(arr);
                if(arr[99] - arr[0] == 0) break;
                else{
                    arr[99] --;
                    arr[0] ++;
                    Arrays.sort(arr);
                }
            }
            System.out.printf("#%d %d\n", i+1,arr[99]-arr[0]);
        }
	}
}

 

 

‼️ 잘못된 시도,,

처음에 sorting하는 것을 생각하지 못하고, max, min을 하나하나 찾아야된다고 생각해버렸다..

import  java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays; 

class Solution
{
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        for(int i = 0; i<10; i++){
            int cnt = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] arr = new int[100];
            Arrays.fill(arr,0);
            for(int j = 0; j <100; j ++){
                arr[Integer.parseInt(st.nextToken()) - 1]++; 
            }
            
            Point max = new Point( Integer.MIN_VALUE, 101);
            Point min = new Point( Integer.MAX_VALUE, 101);
            for(int j = 0; j< cnt; j++){
                
                if( max.cnt - min.cnt == 0) break;
                for(int k = 0; k<100; k++){
                    max = new Point(Math.max(max.cnt, arr[k]), k);
                    min = new Point(Math.min(min.cnt, arr[k]), k);
                }
                max = new Point(max.cnt -1, max.num);
                min = new  Point(min.cnt +1, min.num);
            }
            System.out.printf("#%d %d", i+1,max.cnt-min.cnt);
        }
	}
    public static class Point{
        private int cnt;
        private int num;
        
        public Point(int cnt, int num){
         	this.cnt = cnt;
            this.num = num;
        }
    }
}

 

728x90