Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 소수찾기 java
- RefreshToken
- TestContainers
- spring aop
- 백준
- ObjectOptimisticLockingFailureException 처리
- ObjectOptimisticLockingFailureException
- 멀티모듈 테스트컨테이너
- netty
- jpa
- Invalid property 'principal.username' of bean class
- AccessToken
- java
- Spring Cloud Gateway
- aop
- spring DI
- 형상관리
- 낙관적 락 재시도
- kotest testcontainers
- multimodule testcontainers
- interface
- redissonlock aop
- @transactional
- 우아한 테크러닝
- OptimisticLock
- springsecurity
- S3
- 알고리즘
- 낙관적 락 롤백
- DI
Archives
- Today
- Total
조급하면 모래성이 될뿐
[프로그래머스]가장 큰 수 본문
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42746
나의 풀이
처음에는.. 문제유형을보고 힌트를 얻었다..
정렬 이라고해서 Compare인터페이스를 구현해야겠다고 생각했다.
자릿수 별로 문자열을 비교해서 내림차순으로 정렬을 하도록 구현하였다.
가장 고민을 많이했던부분은, 같은 문자열이 동일하게 존재하는 경우이다.
ex) [ 34, 3435 ] 와 같은경우에는 343435가 더 큰수이다.
이때 비교 기준을 찾기위해.. 비교 한 글자는 지우고, 다음 글자부터 다시 비교하는 방식을 구현하려고 시도하였으나 잘 풀리지 않았다..
그러다 문득 비교대상이 두개이니깐 34 + 3435 붙이고, 3435 + 34 붙여서 비교하면 되겠다는 생각이 정말 문득났다..
그렇게 비교기준을 잡아서 compare메소드에 구현해 주었더니 정답처리 되었다.
나름 머리를 잘 썻다고 생각했는데.. 다른사람의 풀이가 대부분 비슷했다.. ( 오히려 더 깔끔했다.. )
코드
package Programmers.Level2;
import java.util.Arrays;
import java.util.Comparator;
public class MostBigNumber {
public static void main(String[] args) {
int[] numbers = { 3, 30, 34, 5, 9 };
String answer = solution( numbers );
System.out.println(answer);
}//main
public static String solution(int[] numbers) {
String answer = "";
String[] sS = new String[numbers.length];
for ( int i = 0 ; i < sS.length; i++ ) {
sS[i] = String.valueOf(numbers[i]);
}
Arrays.sort( sS , new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if ( o1.charAt(0) > o2.charAt(0) ) return -1;
else if ( o1.charAt(0) < o2.charAt(0)) return 1 ;
else if ( o1.charAt(0) == o2.charAt(0)) {
return (o1+o2).compareTo(o2+o1) * (-1);
}
return 0 ;
}
});
int sum = 0 ;
for ( String s : sS ) {
answer+=s;
sum += Integer.valueOf(s);
}
if ( sum == 0 ) return "0";
return answer;
}
}//class
제출 결과
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스]소수 찾기 (0) | 2019.11.07 |
---|---|
[프로그래머스] 위장 (0) | 2019.11.07 |
[프로그래머스]조이스틱 (5) | 2019.11.07 |
[프로그래머스]큰 수 만들기 (0) | 2019.11.06 |
[프로그래머스] 기능개발 (0) | 2019.11.05 |