알고리즘/정렬

[JAVA] 이.코.테 ( 정렬 ) - 성적이 낮은 순서로 학생 출력하기

hongeeii 2021. 8. 10. 08:00
728x90
반응형

성적이 낮은 순서로 학생 출력하기

문제

N명의 학생의 성적 정보가 주어진다. 형식은 이름 성적 으로 주어지는데 이때 이들의 성적이 낮은 순으로 학생 이름을 출력하는 문제다.

입력

  • 첫 번째 줄에 학생의 수 N이 입력된다. (1 <= N <= 100,000)
  • 두 번째 줄 부터 N+1 번째 줄 까지 학생의 이름 그리고 성적이 공백으로 주어진다. 학생이름 길이는 100이하, 성적은 100이하 자연수로 주어진다.

출력

  • 모든 학생의 이름을 성적이 낮은 순으로 출력하면된다. 동일한 성적은 자유롭게 출력하면된다.

입력 예시

2
홍길동 96
이순신 78

출력 예시

이순신 홍길동

 

 

 

 

나의 풀이

import java.util.Scanner;

public class PrintStudentToLowGrade {

	public static void sort(String[] name, int[] score) {
		for (int i = 0; i < score.length; i++) {
			int min = i;
			for (int j = i; j < score.length; j++) {
				if (score[j] < score[min]) {
					int temp = score[j];
					score[j] = score[min];
					score[min] = temp;

					String temp2 = name[j];
					name[j] = name[min];
					name[min] = temp2;
				}

			}
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("학생 수 :  ");
		int n = sc.nextInt();
		String[] name = new String[n];
		int[] score = new int[n];

		sc.nextLine();

		for (int i = 0; i < score.length; i++) {
			String text = sc.nextLine();
			name[i] = text.split(" ")[0];
			score[i] = Integer.parseInt(text.split(" ")[1]);
		}

		sort(name, score);

		for (int i = 0; i < score.length; i++) {
			System.out.print(name[i] + " ");
		}
	}
}

String타입의 name배열과 int타입의 score배열 두개를 만들고 각각 같은인덱스에 값을 넣었습니다.

score배열로 선택정렬을 하여 값이 바뀔때의 인덱스를 구하여 name배열도 정렬을 시켰습니다.

풀이시간 : 20분

728x90
반응형