개발의 흔적

알고리즘 테스트# 11. 정수 내림차순으로 배치하기 본문

코딩테스트 연습

알고리즘 테스트# 11. 정수 내림차순으로 배치하기

남들에게 도움을 주는 백엔드 개발자가 되자 2020. 7. 23. 16:06

안녕하세요.

 

프로그래머스에 있는 "정수 내림차순으로 배치하기" 알고리즘 문제를 풀어보겠습니다.

 

문제 : 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

 

출력 :

 

118372 873211

 

코드 : 

 

* 문제 해설 *

 

정수 : 118372

 

Long타입의 정수의 길이를 구해야합니다. 

그후 "버블정렬"를 이용하여 가장 작은값이 인덱스의 맨마지막쪽으로 들어갑니다.

 

버블 정렬 : 정렬 기법중 하나로 맨앞 0번쨰 인덱스와 1번째 인덱스를 비교하여 가장 큰값 또는 가장 작은값을 오른쪽으로 치환하는 기법입니다. 물론 Arrays.sort()를 써서 정렬을 구현할수있습니다. 하지만 정렬에 대한 개념을 알고자

버블정렬을 직접 짜보고 해결해봤습니다.

 

 

* 코드 해설 *

정수 n의값을 문자열로 변환합니다. 그후 변환한 값을 배열로 길이를 저장합니다.

저장후 배열을 정수배열의 길이안에 넣습니다. 정수배열로 지정한이유는 버블 정렬시 숫자와 숫자끼리 비교를 해야하기떄문입니다.

그후 str1.length의 길이만큼 반복을 하면서 현재 str[i]의 배열의 인덱스 값을 str1[i]의 배열안에 할당해줍니다.

 

바깥쪽 for문은 str1.length길이만큼 반복을 하고 안쪽 for문에서 길이만큼 반복을합니다.

안쪽 for문은 str1.length - i - 1을 준이유는 바깥쪽 for문의 0번째의 반복이 끝난 후 마지막 인덱스에는 

가장 작은값이 할당이 되어있을껍니다. 

바깥쪽 for문의 i의값이 1인경우에 마지막 인덱스 값을 비교 할필요없기때문에 바깥쪽 for문의 배열의 index의

값을 하나씩 줄여나가 코드의 효율성을 준겁니다. 물론 i의값이 없어도 정상적으로 들어갑니다.

 

좋은코드있으면 공유해주세요

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

Comments