공부하는 히욤이

[S/W 문제해결 기본] 1일차 - Flatten 본문

Algorithm/SW Expert Academy

[S/W 문제해결 기본] 1일차 - Flatten

히욤이 2019. 2. 21. 01:40

[S/W 문제해결 기본] 1일차 - Flatten

문제의 저작권은 SW Expert에 있습니다 




오늘 다시 풀어본 코드

정렬하면 어차피 맨 앞자리의 숫자는 제일 작은수이고 맨 뒷자리는 제일 큰 수이니깐

정렬해서 맨 앞자리에 수는 1을 빼고 맨 뒷 자리는 1을 더하고 정렬하는 방식으로 풀었다.


StringTokenizer, Arrays.sort 같은 함수를 사용했지만 코드가 좀 지저분한 것 같다.



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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //BufferedReader br = new BufferedReader(new FileReader("input.txt"));
        
        
        for (int test_case = 1; test_case <= 10; test_case++) {
            int num = Integer.parseInt(br.readLine()); //횟수
            int[] boxes = new int[100]; //박스 개수
            StringTokenizer st;
            st = new StringTokenizer(br.readLine());
            
            for (int i = 0; i < boxes.length; i++) {//박스 숫자 삽입
                boxes[i] = Integer.parseInt(st.nextToken());
            }
            
            int result = 0//결과 값
            
            for (int i = 0; i < num; i++) {
                Arrays.sort(boxes); //정렬
            
                boxes[0= boxes[0]+1//첫번째 박스 값은 1증가
                boxes[boxes.length-1= (boxes[boxes.length-1]-1); //마지막 박스는 1감소
            }
            Arrays.sort(boxes); //마지막으로 정렬
            result = boxes[boxes.length-1]-boxes[0]; //마지막 박스 값과 첫번째 박스 값의 차
            System.out.println("#"+test_case + " "+ result);
        }
    }
}
 
cs




이건 한 달 전에 푼 코드

배열 밖에 안 썼지만 코드가 깔끔해 보인다.

최대값과 최소값을 찾아서 푸는 방식이다


내 힘으로 푼 게 아니라서 사실 지금 봐도 잘 모르겠다


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
import java.util.Scanner;
 
public class Solution {
 
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
 
        int[] box = new int[101]; //상자의 높이값
 
        for (int test_case= 1; test_case <= 10; test_case++) {
            int max = 0;
            int min = 0;
            int dump = sc.nextInt(); //덤프 횟수
 
            for (int i = 1; i <= 100; i++//상자 높이 값 넣기
                box[i] = sc.nextInt();
 
            for (int j = 0; j < dump; j++) { //덤프 횟수만큼 반복
                for (int i = 1; i < box.length; i++) { 
                    if (box[max] < box[i])  //최대값
                        max = i;
                    if (box[min] > box[i])  //최소값
                        min = i;
                }
 
 
                box[max] = box[max]-1
                box[min]= box[min]+1;
            }
             
 
            for (int i = 1; i < box.length; i++) {
                if (box[max] < box[i]) 
                    max = i;
                if (box[min] > box[i]) 
                    min = i;
            }
 
            System.out.println("#" + test_case + " " + (box[max] - box[min]));
        }
 
        sc.close();
    }
 
}
cs