거북이처럼 천천히

알고리즘(6월 2일) 본문

Algorithm/알고리즘 문제 풀이

알고리즘(6월 2일)

유로 청년 2022. 6. 2. 18:08

1. 문제

  • 사용자로부터 N개의 숫자들을 입력받는다.
  • 입력받은 N개의 숫자들을 내림차순으로 정렬한 후, 정렬한 결과를 출력한다.

 

예시)

사용자 : {2, 4, 6, 10, 8, 12, 14, 16} 입력   →   sortedList : {16, 14, 12, 10, 8, 6, 4, 2} 

 

2. 생각해보기

사용자로부터 받은 숫자들을 "inputNumberList" 리스트에 저장하고, 내림차순으로 정렬된 결과를 "sortedList" 리스트에 저장하며, "inputNumberList" 리스트의 첫 번째 원소를 최대 값이라고 초기에 가정한다.  그리고, while문을 이용하여

"inputNumberList" 리스트의 사이즈가 0이 될 때까지 for문을 이용하여 "inputNumberList" 리스트의 최대 값을 비교하면서 최대 값을 찾는다. 한 번 사이클이 돌고 난 뒤, 최대 값을 "inputNumberList" 리스트에서 삭제, "sortedList" 리스트에 추가하여 N개의 숫자들을 정렬한다.

 

3. 풀이 및 코드 분석

import java.util.Scanner;
import java.util.ArrayList;

public class WhichIsBigger {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		ArrayList<Integer> inputNumberList = new ArrayList<>(); // 사용자로부터 받은 숫자 N개를 저장하는 리스트
		ArrayList<Integer> sortedList = new ArrayList<>(); // 정렬된 숫자 N개를 저장하는 리스트
		
        // 사용자로부터 숫자 N개 입력받기
		while(true) {
			System.out.println("Enter a number : (if you want to quit, Enter !)");
			String inputData = scan.nextLine();
			
			if(inputData.equals("!")) {
				break;
			}else {
				int inputNumber = Integer.parseInt(inputData);
				inputNumberList.add(inputNumber);
			}
		}	
		// 중간 점검 : 입력받은 "inputNumberList" 리스트 확인
		System.out.printf("List \"inputNumberList\" : " + inputNumberList + "\n");
		
        // 내림차순 정렬
		while(inputNumberList.size() > 0) {
			int MaximumNumber = inputNumberList.get(0), MaximumLocation = 0;
			
			for(int i=0; i<inputNumberList.size(); i++) {			
				if(inputNumberList.get(i) > MaximumNumber) {
					MaximumNumber = inputNumberList.get(i);
					MaximumLocation = i;
				}
			}
			
            // sortedList에 최대 값 추가, inputNumberList에 최대 값 삭제
			sortedList.add(MaximumNumber);
			inputNumberList.remove(MaximumLocation);
		}
		
		System.out.printf("Sorted List : " + sortedList + "\n");
		System.out.printf("inputNumberList : " + inputNumberList + "\n");
	}
}

 

'Algorithm > 알고리즘 문제 풀이' 카테고리의 다른 글

알고리즘 (6월 7일) - (2)  (0) 2022.06.07
알고리즘 (6월 7일)  (0) 2022.06.07
알고리즘 (6월 6일)  (0) 2022.06.06
알고리즘 (6월 5일)  (0) 2022.06.06
알고리즘 (6월 3일)  (0) 2022.06.03