https://school.programmers.co.kr/learn/courses/30/lessons/82612
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
![](https://blog.kakaocdn.net/dn/d3OvVj/btrGPDWTfsW/J8HFcVof7ERCi0otUUgVMk/img.png)
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
- n은 1이상 8000000000 이하인 자연수입니다.
발상
숫자를 문자열로 변환하고, 배열로 담은 뒤에 내림차순 정렬하고 다시 long으로 변환하여 반환하면 되는 문제이다.
프로세스는 long을 파싱 -> 정렬 -> 다시 long으로 변환 으로 진행된다.
스트림을 사용하는 방식과 컬렉션을 사용하는 방식 모두 시도해보았는데 long을 파싱하는 부분에서 문제가 있는지 테스트케이스에서 실패하는 경우가 발생하였다.
효율을 위하여 10으로 나누면서 나머지를 배열에 넣는 방식을 사용하였는데, 무언가 문제가 있는 것 같았다.
의사코드
1. String 기본함수를 사용하여 파싱
2. Arrays 기본함수를 사용하여 정렬
3. 반복문(문자열의 길이만큼)
1. 역순으로 재조합
4. 결과를 long으로 변환하여 반환
개선
컬렉션을 사용할 때 오름차순정렬을 하려고 하니 기본형 int배열로는 역방향 정렬을 할 수 없었다.
Integer 래퍼클래스를 사용하거나 해야 했다.
또 스트림을 사용해서 진행한 알고리즘에서도 오름차순 정렬이 Comparator 부분이 숙달이 더 필요해보였다.
'IT > Algorithm' 카테고리의 다른 글
[programmers] 수박수박수박수박수박수 (0) | 2022.07.08 |
---|---|
[programmers] 소수 찾기 (0) | 2022.07.08 |
[programmers] 자릿수 더하기 (0) | 2022.07.08 |
[programmers] 약수의 합 (0) | 2022.07.08 |
[programmers] 서울에서 김서방 찾기 (0) | 2022.07.08 |