[프로그래머스][자바(JAVA)] 정수 내림차순으로 배치하기 -모두의개발

2022. 9. 13. 03:46알고리즘/프로그래머스

※ 요약

-  입력받은 n의 자릿수를 큰것부터 작은 순으로 정렬하는 문제

 


  • 풀이1

※ 참고

형변환 https://quick-finger.tistory.com/19

 

1. String 형변환 후 char배열로 저장한다

2. ch[i]보다 큰수를 찾기위해 두개의 for문을 정의한다

->두번째 for문 int j 는 for문을 통해 정의된 설명(5) +1 로 한다

3. ch[ i ] 보다 ch[ j ] 가 클경우 tmp에 정의한다

4. i보다 큰 j 를 i 에 정의 한다

5. j위치에 원래 i를 정의한다

6. ch를 String형으로 변환후 Long형으로 변환후 리턴한다

 

2~5 예시)

n = 1264 일때

설명(3) -> tmp = ch[0] // 1

설명(4)-> ch[0] = ch[2] // 6

설명(5)-> ch[2] = tmp // ch[0]

설명(2)-> int j = 0 + 1

 

잘 이해가 안될시 적으면서 하는걸 추천!

<정답코드1>

class Solution {
	public long solution(long n) {
		int tmp = 0;
		char[] ch = String.valueOf(n).toCharArray(); //1
		for(int i = 0; i<ch.length; i++) { //2
			for(int j = i+1; j<ch.length; j++) {
				if(ch[i] < ch[j]) {
					tmp = ch[i]; //3
					ch[i] = ch[j]; //4
					ch[j] = (char) tmp; //5
				}
			}
		}
		return Long.parseLong(String.valueOf(ch));//6

	}
}

  • 풀이2

※ 참고

형변환 https://quick-finger.tistory.com/19

split https://quick-finger.tistory.com/20

StringBuilder https://quick-finger.tistory.com/21

 

1. String형으로 변환후 split 함수를 이용해 하나씩 배열로 정의한다

2. 내림차순으로 정렬해준다

3. for-each문으로 sb에 담아준다

4.sb를 Long 타입으로 변환 후 리턴 해준다

 

함수를 이용해 풀이1 보다 비교적 간단하다!

 

<정답코드2>

		String[] arr = String.valueOf(n).split(""); // 1
		Arrays.sort(arr,Collections.reverseOrder());// 2
		StringBuilder sb = new StringBuilder();
		
		for(String str : arr) { // 3
			sb.append(str);
		}
		return Long.parseLong(sb.toString()); // 4