알고리즘 풀이/프로그래머스

[프로그래머스][JAVA] 가장 큰 수 (문자열, 정렬)

배게 2022. 3. 24. 18:48
728x90

테케 11번 반례

[0, 0, 0] => "000" (x)

[0, 0, 0] => "0" (o)

 

clearZero메서드를 하나 만들어줌

 

만들어줬는데 clearZero 필요 없는 더좋은 코드 있어서 그거씀

Line:20의 의미는

[0] , [0, 0] , [0, ... , 0] 등의 오직 원소가 0뿐이고 n개로 이루어진 String의 charAt(0)은

반드시 0인 특징을 활용하여 짜준거

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
49
50
51
52
53
54
55
56
import java.util.*;
 
class Solution {
    public String solution(int[] numbers) {
        List<numberInfo> list = new ArrayList<>();
        for(int i=0; i<numbers.length; i++){
            String number = String.valueOf(numbers[i]);
            list.add(new numberInfo(number));
        }
        
        Collections.sort(list);
        // list.forEach(System.out::println);
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<list.size(); i++){
            sb.append(list.get(i).number);    
        }
        String answer = sb.toString();
        // answer = clearZero(answer);
        
        return (answer.charAt(0)=='0')? "0": answer;
    }
    
    // private String clearZero(String str){
    //     for(int i=0; i<str.length(); i++){
    //         if(str.charAt(i)!='0'){
    //             return str.substring(i, str.length());
    //         }
    //     }
    //     return "0";
    // }
    
    public class numberInfo implements Comparable<numberInfo>{
        String number;
        String numForComparison;
        
        public numberInfo(String number){
            this.number = number;
            StringBuilder sb = new StringBuilder();
            int j=0;
            for(int i=0; i<4; i++){
                sb.append(number.charAt(j++%number.length()));
            }
            this.numForComparison = sb.toString();   
        }
        
        @Override
        public int compareTo(numberInfo ni){
            return ni.numForComparison.compareTo(numForComparison);
        }
                          
        @Override
        public String toString(){
            return number+" "+numForComparison;
        }        
    }
}
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
47
48
49
50
51
52
53
54
55
56
import java.util.*;
 
class Solution {
    public String solution(int[] numbers) {
        List<numberInfo> list = new ArrayList<>();
        for(int i=0; i<numbers.length; i++){
            String number = String.valueOf(numbers[i]);
            list.add(new numberInfo(number));
        }
        
        Collections.sort(list);
        // list.forEach(System.out::println);
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<list.size(); i++){
            sb.append(list.get(i).number);    
        }
        String answer = sb.toString();
        answer = clearZero(answer);
        
        return answer;
    }
    
    private String clearZero(String str){
        for(int i=0; i<str.length(); i++){
            if(str.charAt(i)!='0'){
                return str.substring(i, str.length());
            }
        }
        return "0";
    }
    
    public class numberInfo implements Comparable<numberInfo>{
        String number;
        String numForComparison;
        
        public numberInfo(String number){
            this.number = number;
            StringBuilder sb = new StringBuilder();
            int j=0;
            for(int i=0; i<4; i++){
                sb.append(number.charAt(j++%number.length()));
            }
            this.numForComparison = sb.toString();   
        }
        
        @Override
        public int compareTo(numberInfo ni){
            return ni.numForComparison.compareTo(numForComparison);
        }
                          
        @Override
        public String toString(){
            return number+" "+numForComparison;
        }        
    }
}
cs