GaGe

[프로그래머스] 큰 수 만들기 - java 본문

알고리즘/[2020] 프로그래머스

[프로그래머스] 큰 수 만들기 - java

Sorrel 2020. 5. 10. 20:32

모든 저의 코드는 아래에서 위로 시간순서가 이루어집니다.

 

 

char를 숫자로 바꿔서 비교하고 다시 string 형태로 바꿔서 StringBuilder에 붙이려고 해서 그랬던 것이었다.

사실 char 끼리도 아스킷코드로 크기 비교 가능하다.

그리고 char에서 int 형으로 간단히 바꾸는 방법은 

char character = '1';
int num = caracter-'0';

이다.

class Solution {
    public String solution(String number, int k) {
        int num1 = number.length()-k; //number에서 number-k개를 선택
        int index = 0;
        int flag;
        StringBuilder answer = new StringBuilder();
        while(num1 > 0){
            String temp = number.substring(index,number.length()-num1+1);
            char max = '0';
            flag=index;
            for(int j = 0 ; j < temp.length() ; j++){ //매 k마다 가장 큰 수 찾음
                if(max<temp.charAt(j)){
                    index = j+flag+1;
                    max = temp.charAt(j);
                }
            }
            --num1;
            answer.append(max);
        }
        return answer.toString();
    }
}

 

아래 두 코드로 돌리면 10번이 시간초과가 뜬다 왜 그럴까

class Solution {
    public String solution(String number, int k) {
        int num1 = number.length()-k; //number에서 number-k개를 선택
        int index = 0;
        int flag;
        StringBuilder answer = new StringBuilder();
        while(num1 > 0){
            String temp = number.substring(index,number.length()-num1+1);
            int max = 0;
            flag=index;
            for(int j = 0 ; j < temp.length() ; j++){ //매 k마다 가장 큰 수 찾음
                if(max<Character.getNumericValue(temp.charAt(j))){
                    index = j+flag+1;
                    max = Character.getNumericValue(temp.charAt(j));
                }
            }
            --num1;
            answer.append(max);
        }
        return answer.toString();
    }
}

 

class Solution {
    public String solution(String number, int k) {
        int num1 = number.length()-k; //number에서 number-k개를 선택
        int index = 0;
        int flag;
        StringBuilder answer = new StringBuilder();
        while(num1 > 0){
            String temp = number.substring(index,number.length()-num1+1);
            int max = 0;
            flag=index;
            for(int j = 0 ; j < temp.length() ; j++){ //매 k마다 가장 큰 수 찾음
                if(max<Integer.parseInt(String.valueOf(temp.charAt(j)))){
                    index = j+flag+1;
                    max = Integer.parseInt(String.valueOf(temp.charAt(j)));
                    
                }
                
            }
            --num1;
            answer.append(max);
        }
        
        return answer.toString();
    }
}
class Solution {
    public String solution(String number, int k) {
        String answer = "";
        int num1 = number.length()-k; //number에서 number-k개를 선택
        int index = 0;
        int flag;
        StringBuilder sb = new StringBuilder();
        System.out.println("original string : "+number);
        while(num1 > 0){
            String temp = number.substring(index,number.length()-num1+1);
            System.out.println("index : "+index+", 어디까지 : "+Integer.toString(number.length()-num1));
            System.out.println("temp : "+temp);
            int max = 0;
            flag=index;
            for(int j = 0 ; j < temp.length() ; j++){ //매 k마다 가장 큰 수 찾음
                if(max<Integer.parseInt(String.valueOf(temp.charAt(j)))){
                    index = j+flag+1;
                    max = Integer.parseInt(String.valueOf(temp.charAt(j)));
                    
                }
                
            }
            System.out.println("find max : "+max);
            System.out.println("index + 1 : "+ index);
            --num1;
            System.out.println("max : "+max);
            sb.append(max);
            System.out.println("answer : "+sb);
            System.out.println("-------------------------------------");
        }
        System.out.println(sb);
        answer=sb.toString();
        return answer;
    }
}
class Solution {
    public String solution(String number, int k) {
        String answer = "";
        int num1 = number.length()-k; //number에서 number-k개를 선택
        int index = 0;
        StringBuilder sb = new StringBuilder(number);
        while(num1 > 0){
            String temp = number.substring(index,number.length()-num1);
            System.out.println("index : "+index+", 어디까지 : "+Integer.toString(number.length()-num1));
            System.out.println(temp);
            int max = 0;
            for(int j = 0 ; j < temp.length() ; j++){ //매 k마다 가장 큰 수 찾음
                if(max<Integer.parseInt(String.valueOf(temp.charAt(j)))){
                    index = j+1;
                    max = Integer.parseInt(String.valueOf(temp.charAt(j)));
                    System.out.println("find max : "+Integer.parseInt(String.valueOf(temp.charAt(j))));
                    System.out.println("index + 1 : "+ index);
                }
                
            }
            --num1;
            System.out.println("max : "+max);
            sb.append(Integer.toString(max));
            System.out.println(sb);
        }
        System.out.println(sb);
        answer=sb.toString();
        return answer;
    }
}
class Solution {
    public String solution(String number, int k) {
        String answer = "";
        int num = number.length()-k; //number에서 number-k개를 선택
        int index = 0;
        while(k>0){
            for(int i = index ; i<= number.length(); i++)
        }
        
        
        return answer;
    }
}
Comments