티스토리 뷰
이문제는 정렬을 잘 활용할 수 있는가를 묻는 간단한 문제였다(사실 나에겐 정말 간단하지는 않았다는...) 이문제는 예전에 풀어보고 코드를 정리하다가 못 풀고 넘어가서 다시 푼 문제이다. 그래도 실력이 쪼끔은 늘었는지 보고서 String으로 내림차순!이라고 생각을 했다는 ㅎ 하지만 그게 끝이 아니었다지....
문제풀이
-가장 큰 수를 만들려면 가장 큰 숫자가 앞에 와야 한다.
-int형으로 큰 수가 아닌 String형으로 사전 순으로 큰 숫자가 앞으로 와야 한다
(예 : 89, 9 int형으로 큰 수는 89 정렬 시 899라는 숫자가 나옴 | String의 경우 989라는 숫자가 나오고 더 큰 숫자가됨)
-처음에는 그냥 간단히 String으로 변환시킨 배열을 정렬을 시켰지만 문제가 생김 (3,30의 경우 303이 되어버림....)
-두 개의 숫자를 합친 것을 비교하면 가능하다는 것을 발견! Comparator <String>을 사용하여 정렬 후 숫자를 만듦
-여기서 놓치면 안 되는 게 000이라는 숫자가 나올 수 있기에 예외처리를 해줘야 함!
import java.util.Arrays;
import java.util.Comparator;
public class Solution{
public static void main(String[] args) {
// TODO Auto-generated method stub
String answer = "";
int[] numbers = {3,30,34,5,9};
String[] strNum = new String[numbers.length];
//숫자를 스트링 사전 내림차순으로 정렬하기위해 변환
for(int i=0;i<numbers.length;i++) {
strNum[i]=String.valueOf(numbers[i]);
}
Arrays.sort(strNum, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
//3,30으로 330 303을 구분하기 위해 String을 합쳐서 비교해줌
return (s2+s1).compareTo(s1+s2);
}
});
for(String i : strNum) {
answer+=i;
}
//000이 0으로 나오게 하기위한 처리
if(answer.charAt(0)=='0') {
answer="0";
}
System.out.println(answer);
}
}
'CS공부 > 알고리즘&문제풀이' 카테고리의 다른 글
[백준 17837]새로운 게임2/삼성 sw역량 테스트 기출(java) (0) | 2020.07.24 |
---|---|
[프로그래머스]스택/큐:프린터(java) (0) | 2020.07.14 |
[프로그래머스]완전탐색:소수 찾기(java) (0) | 2020.07.08 |
[프로그래머스]힙(Heap):이중우선순위큐(java) (0) | 2020.07.05 |
[프로그래머스]힙(Heap):디스크 컨트롤러(java) (0) | 2020.06.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정렬
- 프로그래머스
- 백준
- programers
- OS
- 자바
- 채팅
- sockjs
- SWEA
- websocket
- 운영체제
- BFS
- 삼성 sw역량테스트
- 분리 집합
- Baekjoon
- MST
- git
- dfs
- 최소 스패닝 트리
- Spring
- JavaScript
- 알고리즘
- Stomp
- 완전탐색
- Heap
- Oracle
- 코딩테스트
- DP
- 삼성 sw역량 테스트
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함