[알고리즘] 프로그래머스 가장 큰 수

shininghyunho·2022년 3월 3일
0

문제

{3,30,301,4} 같이 숫자들이 배열로 주어질때
순서를 정렬하여 가장 큰 수를 만들어보라는 문제다.

해결

숫자를 정렬해 쭉 이어주면 될거같았다.
문제는 어떤 기준으로 정할지 고민되었다.

3 30 이면 303 보다 330이 더 크다.
그래서 각 숫자를 문자열로 만들고 이어준 후
어느것이 더 큰지 비교하였다.

가장 핵심이 되었던 함수다.

private int compareNum(int o1,int o2) {
    	String s1=String.valueOf(o1);
    	String s2=String.valueOf(o2);
    	int num1=Integer.parseInt(s1+s2);
    	int num2=Integer.parseInt(s2+s1);
    	return num2-num1;
    }

또한 0을 체크해줘야하는데 안해줘서 틀렸었다.
(지금처럼 말고 list에 0번 인덱스가 0이면 0을 반환해도 될거같다.)

CODE

import java.util.*;

class Solution_가장큰수 {
	List<Integer> list=new ArrayList<>();
    public String solution(int[] nums) {
    	int zeroCnt=0;
        for(int num:nums) {
        	if(num==0) zeroCnt++;
        	list.add(num);
        }
        if(nums.length==zeroCnt) return "0";
    	list.sort((o1,o2)->{
    		return compareNum(o1,o2);
    	});
    	StringBuilder sb=new StringBuilder();
    	for(int num:list) {
    		sb.append(num);
    	}
        return sb.toString();
    }
    private int compareNum(int o1,int o2) {
    	String s1=String.valueOf(o1);
    	String s2=String.valueOf(o2);
    	int num1=Integer.parseInt(s1+s2);
    	int num2=Integer.parseInt(s2+s1);
    	return num2-num1;
    }
}

public class 가장큰수 {
	public static void main(String[] args) {
		Solution_가장큰수 sol=new Solution_가장큰수();
		int[] nums={3,30,301,4};
		String ans=sol.solution(nums);
		System.out.print(ans);
	}
}
profile
shining itself

0개의 댓글

관련 채용 정보