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
- Parcelable
- EditText
- 백준 14501
- Parcelize
- 지능형 기차2
- 약수 구하기
- 백준 퇴사
- 조합
- 순수함수
- 순열
- 최단경로
- BFS
- val
- Kotlin
- Android
- BuildConfig
- 2501
- 완전탐색
- hilt
- 시뮬레이션
- imeOptions
- EditorInfo
- SWEA
- java
- dfs
- 자바
- 스카이라인 쉬운거
- 오르막수
- 프로그래머스
- 백준
Archives
- Today
- Total
안드 공부를 해볼까?
[Java] 프로그래머스 가장 큰 수 본문
728x90
1. 문제 파악
주어진 배열을 통해 숫자를 만들고 이중 가장 큰수를 선택하는 문제다.
처음은 배열을 정렬하면 끝이지 않나? 싶었지만 테스트케이스 2를 보면 30이 3보다 값이 크지만 뒤로간다.
그럼 이제 3과 30을 비교해본다고 하자. 두 개를 붙이면 303과 330이 된다.
303과 330중 큰 수는 330이다. 앞의 숫자 + 뒤의 숫자와 뒤의 숫자 + 앞의 숫자를 비교해서 정렬하면 된다.
2. 구현
import java.util.*;
public class main {
public static void main(String[] args) {
int[] times = new int[]{3,30,34,5,9};
System.out.println(new Solution().solution(times));
}
}
class Solution {
public String solution(int[] numbers) {
String answer = "";
//정렬을 위해 배열에 값을 담아줌
String[] numArr = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
numArr[i] = String.valueOf(numbers[i]);
}
//정렬, 앞수+뒷수, 뒷수+앞수로 큰 값을 구함
Arrays.sort(numArr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
//맨 앞자리가 0이면 나머지도 0임, 0을 리턴
if(numArr[0].equals("0")){
return "0";
}
//데이터 추가해주기
for(String data : numArr){
answer += data;
}
return answer;
}
}
정렬하는 방법만 안다면 쉽게 풀 수 있다.
위의 코드는 람다식으로 구현했고 앞의 숫자 + 뒤의 숫자와 뒤의 숫자 + 앞의 숫자로 정렬했다.
또한 테스트케이스 11이 통과가 안돼서 왜 안될까 고민해봤는데 만약[0,0,0,0]이 들어가면 "0000"으로 리턴된다.
그래서 인덱스 0인 값이 "0"이면 "0"을 리턴해줬다.
3. 마무리
코테 준비를 할 수록 뭔가 많이 부족한 사람이란걸 알았다.
정렬도 못해서 인터넷을 찾는 수준이면 많이 심각하다고 생각한다.
그래도 코테에서 정말 기본적인 문제는 해결이 가능하다. 아직 심화는 해결하지 못하지만..
점점 늘고있으니 나태해지지말고 열심히 해야겠다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 섬 연결하기 (0) | 2022.05.12 |
---|---|
[Java] 프로그래머스 구명보트 (0) | 2022.05.11 |
[Java] 프로그래머스 입국심사 (0) | 2022.05.10 |
[Java] 프로그래머스 N으로 표현 (0) | 2022.05.08 |
[Java] 프로그래머스 K번째 수 (0) | 2022.05.05 |
Comments