Algorithm/JUNGOL

[정올] 617 : 구조체 - 자가진단5 (**)

Gyuri 2022. 1. 10. 00:46

문제

5명의 이름과 키를 입력받아 키가 가장 작은 사람의 이름과 키를 출력하는 프로그램을 작성하시오. 이름은 20자 이하이다.

 

입력 예

Park 175 
Lee 180 
Choo 185 
Son 193 
Kim 188

출력 예

Park 175

 

코드

import java.util.*;

class School {
    String name;
    int height;
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        School s[] = new School[5];
        for(int i=0; i<s.length; i++) {
            s[i] = new School();
        }

        int min = 0; // 가장 작은 학생의 키
        String minName = ""; // 키가 가장 작은 학생의 이름

        // 각 학생의 이름, 키 입력받기
        for(int i=0; i<5; i++) {
            s[i].name = sc.next();
            s[i].height = sc.nextInt();

            min = s[0].height;
            minName = s[0].name;
        }

        // 키 가장 작은 학생의 키와 이름 구하기
        for(int j=0; j<5; j++) {
            if(s[j].height < min) {
                min = s[j].height;
                minName = s[j].name;
            }
        }
        System.out.printf("%s %d", minName , min);
    }
}

※ 가장 키가 작은 학생의 키를 나타내는 min을 구하기 위해 min의 초기값과 다른 학생들의 키를 같은 for문 안에서 비교하게 되면 min의 값이 계속 s[0].height 가 적용된다.

따라서, 각 학생의 키와 이름을 입력 받는 for문 안에서 min과 minName의 초기값을 설정해주고, 그 값과 다른 학생의 키를 비교하는 for문은 코드를 따로 구현해야 한다.


 ※ 자바에는 구조체가 없어 클래스로 구조체를 사용하는데, 

 

class School {

  String name;

  int height;

}

 

이를 배열로 사용하려면, 

School s[] = new School[5];

이처럼 코드를 짜주는데, 이렇게만 코드를 구현하면 실행했을 때 NullPointer 에러가 발생하게 된다.

 

이 경우엔, 아래처럼 배열 개수만큼 일일이 생성해주면 에러가 해결된다.

School s[] = new School[5];
for(int i=0; i<s.length; i++) {
    s[i] = new School();
}