이것이 취업을 위한 코딩 테스트다. 정렬 [성적이 낮은 순서로 학생 출력하기]

GoshK·2022년 1월 28일
0

이것이 취업을 위한 코딩 테스트다. with 파이썬 - 나동빈

나의 풀이

Java

public class LowGradeStudent {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        HashMap<Integer, String> student = new LinkedHashMap<>();

        for(int i = 0; i < N; i++) {
            String[] s = br.readLine().split(" ");
            student.put(Integer.parseInt(s[1]), s[0]);
        }

        List<Integer> scores = student.keySet().stream().sorted().collect(Collectors.toList());

        for(int i = 0; i < scores.size(); i++) {
            System.out.print(student.get(scores.get(i)) + " ");
        }
    }
}
  • map 을 이용하여 성적을 키, 이름을 밸류 값으로 지정하였다.
  • 입력을 모두 받고, 맵에서 성적(키) 값을 정렬 시켜 리스트를 만든다.
  • 성적순으로 정렬된 리스트를 키 값으로 사용하여 맵에서 이름을 출력한다.

Python

N = int(input())

arr = []

for i in range(N):
    arr.append(tuple(input().split()))

def setting(data):
    return data[1]

arr = sorted(arr, key=setting)

for i in range(len(arr)):
    print(arr[i][0], end=" ")
  • 리스트를 만들어 입력 값을 튜플로 리스트에 넣는다.
  • 정렬 기준 함수를 만들어 sorted 함수에 사용한다.
  • 그리고 이름 출력

문제 해설 & 느낀점

자바 풀이를 보니 Student 객체를 만들어 compareTo 를 오버라이딩 하여 성적순으로 정렬하였다. 객체지향적이라서 보기 좋았다. 파이썬 코드는 파이썬의 람다로 접근하였는데, 람다는 아직 잘 몰라서 그냥 책에 나온 방식으로 접근했다.

class Student implements Comparable<Student> {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    @Override
    public int compareTo(Student o) {
        return this.score - o.score;
    }
}

public class LowGradeStudent {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        List<Student> arr = new ArrayList<>();

        for(int i = 0; i < N; i++) {
            String[] s = br.readLine().split(" ");
            arr.add(new Student(s[0], Integer.parseInt(s[1])));
        }

        Collections.sort(arr);

        for(int i = 0; i < arr.size(); i++) {
            System.out.print(arr.get(i).getName() + " ");
        }
    }
}

0개의 댓글