문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를 들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
- n은 1이상 8000000000 이하인 자연수입니다.
풀이 과정 (자바)
자릿수마다 비교해서 정렬할 int형 배열을 만들기 위해
먼저, 입력받은 n을 String형 배열 arr에 담았다.
그리고 int형 배열인 tmp를 임의로 생성했다.
Integer.parseInt를 통해 arr에 있는 값을 tmp에 int로 담았다.
잠시 값을 넣어둘 임의의 변수 t를 생성했다.
그리고 첫 번째 index에 있던 값과 두 번째 index 값을 비교했다.
두 번째 값이 첫 번째 값보다 크다면 두 값은 서로 바뀌도록 처리했다.
이 과정을 배열에 있는 값 전부(끝까지)와 비교해 처리했다.
그렇게 첫 번째 값이 처리가 끝나면 (첫 번째 값이 가장 큰 값)
두 번째로 큰 값을 찾도록 했고, 계속해서 과정을 진행하여 모든 값이 큰 순서대로 나올 수 있도록 정렬했다.
이 값을 String으로 받고, 다시 Long형으로 반환하여 return 했다.
결과
다른 사람의 풀이
입력받은 n을 String으로 변환하고, chars()를 통해 해당 값을 stream으로 받았다.
그리고 그 값을 정렬(오름차순)하고, String형 res 변수에 값을 받았다.
res에 값을 넣을 때, 새로 받는 값을 왼쪽에 추가하여 내림차순(큰 수 -> 작은 수)으로 처리했다.
res 값을 long형으로 변환하여 return 했다. (람다식, Stream)
기타
다양한 방법을 생각했지만, 순서대로 큰 수를 맨 앞으로 지정하는 것으로 결정했다.
현재 내 실력에서는 이게 최선인 거 같았다.
Stream이나 Sort등 을 이용해 처리하는 방법도 생각했지만,
알고리즘 문제를 풀 때는 웬만하면 쓰지 않는 것이 좋을 거 같아 다른 방법을 생각했다.
(근데 쓰는 게 더 나았을 거 같기도 하다. 그게 더 배우는 건 많은 거 같다.)
이번에 람다식, 스트림에 대해 아는 것이 많이 없다는 것을 느꼈다.
사실 제대로 공부해 본 적이 없었다. 낯설다고 사용하지도 않고, 멀리하려고 했던 거 같다.
공부를 반드시 해서 지금까지 가지고 있던 이 두려움(?)을 없애야겠다.
막상 써 보면 생각한 것보다는 무서운 게 아니라는 걸 깨닫게 될 거다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level1) 자릿수 더하기 (0) | 2021.10.19 |
---|---|
[프로그래머스] Level1) 자연수 뒤집어 배열로 만들기 (0) | 2021.10.18 |
[프로그래머스] Level1) 정수 제곱근 판별 (0) | 2021.10.16 |
[프로그래머스] Level1) 제일 작은 수 제거하기 (0) | 2021.10.15 |