22.5.09 [HackerRank]Java Instanceof keyword

서태욱·2022년 5월 9일
0

Algorithm

목록 보기
38/45
post-thumbnail

✅ 문제 분석

Java instanceof 연산자는 객체 또는 인스턴스가 지정된 유형의 인스턴스인지 테스트하는 데 사용된다.

Student, Rockstar, Hacker 클래스가 주어졌다.
메인 메소드에서 이 클래스들의 여러 인스턴스로 ArrayList를 채웠다.
count 메소드는 ArrayList안에 각 타입별로 얼마나 많은 인스턴스가 있는지를 계산한다.
이 코드는 3가지 정수를 출력한다. (student 클래스, rockstar 클래스, hacker 클래스의 인스턴스 수)

그런데, 코드 일부 라인이 누락되어 3줄을 고쳐야 한다.
다른데는 고치지 말고 딱 세줄만 고쳐라

🌱 배경지식

instanceof: 객체 타입 확인 연산자다. 형 변환이 가능한지 여부를 true or false로 반환해 알려준다.
(수퍼 객체인지 서브 객체인지 확인하는 데 사용한다)

object instanceOf type
의 형태로 사용하며, object가 type이거나 type을 상속받는 클래스면 true를 반환한다. 아니면 false 반환.

public class ArrayList<E> implements List {
}

public List {

ArrayList list = new ArrayList();

	System.out.println(list instanceof ArrayList);
	System.out.println(list instanceof List);
	System.out.println(list instanceof Set);

}


//결과 
true
true
false

ArrayList 객체가 있을 때, instanceOf를 사용하면 이 객체가 ArrayList인지, List로부터 상속받은 클래스의 객체인지 확인할 수 있다.
Set의 클래스인지 확인할 때는 false가 리턴되는데, arraylist는 set도 아니고, set을 상속하지도 않기 때문이다.

✏️ 해설

import java.util.*;


class Student1{}
class Rockstar{   }
class Hacker{}


public class InstanceOfKeyword{

    static String count(ArrayList mylist){
        int a = 0,b = 0,c = 0;
        for(int i = 0; i < mylist.size(); i++){
            Object element=mylist.get(i);
            if(element instanceof Student1)
                a++; //element가 student1 클래스이거나, 그 클래스를 상속받는다면 a를 하나 증가시킨다. 
            if(element instanceof Rockstar)
                b++;
            if(element instanceof Hacker)
                c++;
        }
        String ret = Integer.toString(a)+" "+ Integer.toString(b)+" "+ Integer.toString(c);
        return ret;
    }

    public static void main(String []args){
        ArrayList mylist = new ArrayList();
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for(int i=0; i<t; i++){
            String s=sc.next();
            if(s.equals("Student"))mylist.add(new Student1());
            if(s.equals("Rockstar"))mylist.add(new Rockstar());
            if(s.equals("Hacker"))mylist.add(new Hacker());
        }
        System.out.println(count(mylist));
    }
}
// Sample Input
// 5
// Student
// Student
// Rockstar
// Student
// Hacker
//
// Sample Output
//
// 3 1 1

👉 참고

profile
re:START

0개의 댓글