[Java] 자바 알고리즘, 프로그래머스 알고리즘 문제풀이 "정수 내림차순으로 배치하기"
- 알고리즘 문제/[Java] 알고리즘
- 2019. 4. 28. 22:56
정수 내림차순으로 배치하기
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n return
118372 873211
나의 풀이
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 | import java.util.*; class Solution { public long solution(long n) { long answer = 0; String strResult=""; String strn = String.valueOf(n); List<String> slist = Arrays.asList(strn.split("")); List<Integer> ilist = new ArrayList<Integer>(); for(String s : slist) { ilist.add(Integer.parseInt(s)); } ilist.sort(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2-o1; } }); for(Integer i : ilist) { strResult+=String.valueOf(i); } answer = Long.parseLong(strResult); return answer; } } | cs |
- 자연수 n을 String으로 변환하고 각 자리수를 잘라서 List에 담았습니다.
- 담은 값들을 for문 돌면서 int형으로 형변환하면서 integer형 List에 담습니다.
- 내림차순 정렬은 Collection.sort()와 Arrays.sort() 모두 제공하지 않기 때문에 저는 List인터페이스의 sort() 메소드에 Comparator 익명객체(compare메소드 오버라이딩)을 대입해서 내림차순으로 정의하였습니다. -> 이에 대해서 더 자세히 알고싶으시면 https://sas-study.tistory.com/105 여기를 참고해주세요!!
- 그렇게 정렬한 integer형 list를 String 변수에다가 String형으로 변환하고 붙여넣습니다.
- Long 클래스에서 제공하는 parseLong() 메소드를 이용해서 문자열을 Long 타입으로 parse하고 반환해주었습니다.!
다른사람의 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class ReverseInt { String res = ""; public int reverseInt(int n){ res = ""; Integer.toString(n).chars().sorted().forEach(c -> res = Character.valueOf((char)c) + res); return Integer.parseInt(res); } // 아래는 테스트로 출력해 보기 위한 코드입니다. public static void main(String[] args){ ReverseInt ri = new ReverseInt(); System.out.println(ri.reverseInt(118372)); } } | cs |
- 람다식과 스트림을 이용하면 코드량이 확 줄어들 수 있다는 것을 보여주는 코드입니다...
로직을 쪼개보자면..
1. 자연수를 Integer.toString() 메소드를 이용해서 String으로 변환.
2. chars() 메소드로 char배열로 쪼개고 이를 sorted() 메소드로 오름차순 변환!
3. 그리고 각 요소를 c라는 변수로 forEach(람다식) 형태로 접근.
4. 오름차순된 값을 12345라면 1부터 차근차근 오른쪽으로 붙여넣으면 54321 이런식으로 오름차순 정렬 효과를 나타냄.
5. 반환
'알고리즘 문제 > [Java] 알고리즘' 카테고리의 다른 글
[Java] 자바 알고리즘, 백준 알고리즘 문제풀이 "X보다 작은 수"(10871번) (0) | 2019.05.01 |
---|---|
[Java] 자바 알고리즘, 백준 "세 수의 중간수 출력" 알고리즘 문제풀이 (0) | 2019.05.01 |
[Java] 자바 알고리즘, 프로그래머스 알고리즘 문제풀이 "정수 제곱근 판별" (0) | 2019.04.27 |
[Java] 자바 알고리즘, 프로그래머스 알고리즘 문제풀이 "하샤드 수" (0) | 2019.04.27 |
[Java] 자바 알고리즘, 프로그래머스 알고리즘 문제 "행렬의 덧셈" (0) | 2019.04.27 |