알고리즘/정렬

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

hongeeii 2021. 8. 10.
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
반응형

추천 글