-
[프로그래머스] Level.2 가장 큰 수 (JAVA)개발공부/코딩테스트 연습문제 2022. 2. 8. 10:38
문제 설명과 제한사항

풀이
import java.util.*; class Solution { public String solution(int[] numbers) { String answer = ""; List<String> nums = new ArrayList<String>(); String num1, num2; for(int num : numbers){ nums.add(Integer.toString(num)); } Collections.sort(nums,Collections.reverseOrder()); for(int i = nums.size()-1; i > 0; i--){ num1 = nums.get(i); num2 = nums.get(i-1); if(num2.startsWith(num1) && num2.length() > num1.length()){ int n1 = Integer.parseInt(num1); int n2 = Integer.parseInt(num2.substring(1,num1.length()+1)); if(n1 > n2) { nums.set(i,num2); nums.set(i - 1, num1); } } } for(int i = 0; i < nums.size(); i++){ answer += nums.get(i); } if(answer.startsWith("0")) return "0"; return answer; } }++

결과는 다음과 같다..
내 풀이는 문자열 List 로 변경해서 내림차순으로 sort
그러면 6, 10, 2 는 6, 2, 10
3, 34, 30, 5, 9 는 9, 5, 34, 30, 3 으로 정렬된다
이 상태에서 첫번째 예시는 바로 만들 수 있지만 두번째 예시는
9 5 34 30 3 보다 9 5 34 3 30이 더 크기 때문에
순서를 바꿔줘야 한다고 생각했다.
때문에 마지막 순서부터 num1(3), num2(30)
1. num2가 num1으로 시작하면
2. num2의 길이가 num1보다 길다면 (중복값)
3. num2의 1번째 30 에서 0 부터 num1길이만큼 자른다.
4. 두 값을 비교해서 num1이 더 크면 자리를 바꾼다.
는 식으로 접근했지만 실패..
++
다른 사람들의 풀이를 검색해보니 compareTo를 통해 간단하게 풀었다.
풀이의 내용을 보면 num1 과 num2를 비교했을때 num2의 o1 + o2 (30) 보다 o2 + o1 (03)이 더크면 바꾸는 식 이었던걸로 기억한다. 조금 더 풀어보고, 무리가 있다고 생각되면 compareTo를 공부해서 다시 풀어볼 예정이다.
'개발공부 > 코딩테스트 연습문제' 카테고리의 다른 글
[프로그래머스] Level.2 H-Index (JAVA) (0) 2022.02.07 [프로그래머스] Level.2 - 프린터 (JAVA) (0) 2022.01.26 [프로그래머스] Level.2 - 문자열 압축(JAVA) (0) 2022.01.21 [프로그래머스] Level.2 - 전화번호 목록 (JAVA) (0) 2022.01.21 [프로그래머스] Level.2 - (1차)뉴스 클러스터링 (JAVA) (0) 2022.01.19