[백준] java 1427

Sundae·2023년 7월 27일
0

백준

목록 보기
18/63
post-thumbnail
post-custom-banner

https://www.acmicpc.net/problem/1427


문제

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.

문제 접근 / 풀이 과정

문제에서 이미 풀이방법을 던져주었다. "각 자리수를 내림차순으로 정렬"
바로 코드로 옮겨보자.

import java.io.*;
import java.util.ArrayList;


public class Main{
   public static void main(String[] args) throws IOException { 
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
      
      int N = Integer.parseInt(bf.readLine());
      
      ArrayList<Integer> array = new ArrayList<>();
      // ArrayList에 10을 나눈 나머지를 반복해서 넣는다
      // sum은 입력값에서 10을 계속 나눠준다
      int sum = N;
      while( sum / 10 != 0) 
      {
    	  array.add(sum%10);
    	  sum /= 10;
      }
      array.add(sum);
     	
		//새로운 배열만들기 , 카운트 정렬
		int[] count = new int[10];
		for (int i = 0; i < array.size(); i++) {
			count[array.get(i)]++;
		}
			
		// 출력
		for (int i = 9; i >= 0; i--)
		{
			for (int j = 0; j < count[i]; j++) 
			{
				if(count[i] == 0)				
					break;					
				else				
					bw.write(i + "");				
			}
		}
		bw.flush();	 
   }  
}     
     
  1. sum을 10으로 나누었을 때 0이 되지 않을 때까지 반복한다.
  2. 2143이라는 수로 예를 들었을 때, sum에는 2143을 대입한다.
  3. sum(2143) % 10의 결과는 3이다. ArrayList에는 3이 추가된다.
  4. sum(2143) / 10의 결과는 214이다. 결과를 sum에 저장한다. 이를 반복하면 배열에는 3 , 4 , 1을 저장하게 된다.
  5. 마지막에는 sum은 2가 남았으므로 2 / 10 의 결과는 0이다.
    반복문의 조건인 sum / 10 != 0이 false이므로 탈출, array에는 2가 저장된다.
  6. 각 자리수에 들어올 수 있는 수는 0~9뿐이므로 10크기를 가진 배열을 생성, 카운트 정렬을 사용하여 출력한다.

본 문제를 두 가지 방법으로 풀어보았다.
하나는 위의 코드인데, 바로 이전 문제에서 사용하였던 카운트정렬과 비슷한 방법을 사용하였고, 다른 하나는 버블 정렬을 사용하였다.

느낀점

슬슬 프로그래밍 언어의 주요 문법 알고리즘을 벗어나서 다양한 자료구조와 알고리즘의 세계로 들어가는 것 같다.
여러가지 자료구조와 알고리즘을 공부하여 다양한 곳에 활용하고 싶다.

profile
성장 기록 / 글에 오류가 있다면 댓글 부탁드립니다.
post-custom-banner

0개의 댓글