HR자바 Can You Access?

개요[ | ]

HR자바 Can You Access?
해커랭크 Java
# 문제 비고
HR자바 Advanced e
53 HR자바 Java Varargs - Simple Addition
54 HR자바 Java Reflection - Attributes
55 HR자바 Can You Access?
56 HR자바 Prime Checker
57 HR자바 Java Factory Pattern
58 HR자바 Java Singleton Pattern
59 HR자바 Java Visitor Pattern
60 HR자바 Java Annotations
61 HR자바 Covariant Return Types
62 HR자바 Java Lambda Expressions
63 HR자바 Java MD5
64 HR자바 Java SHA-256

Java
Copy
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import java.util.regex.*;
import java.security.*;

public class Solution {

    public static void main(String[] args) throws Exception {
        DoNotTerminate.forbidExit();	

        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int num = Integer.parseInt(br.readLine().trim());
            Object o;// Must be used to hold the reference of the instance of the class Solution.Inner.Private
Java
Copy
            //Write your code here
            Class inner = Class.forName("Solution$Inner");
            Class priv = Class.forName("Solution$Inner$Private");
            Constructor con = priv.getDeclaredConstructor(inner);
            con.setAccessible(true);
            o = con.newInstance(inner.newInstance());
            Method method = priv.getDeclaredMethod("powerof2",int.class);
            method.setAccessible(true);
            System.out.println(String.valueOf(num)+" is "+method.invoke(o,num));
Java
Copy
            System.out.println("An instance of class: " + o.getClass().getCanonicalName() + " has been created");
        }//end of try
        catch (DoNotTerminate.ExitTrappedException e) {
            System.out.println("Unsuccessful Termination!!");
        }
    }//end of main
    static class Inner{
        private class Private{
            private String powerof2(int num){
                return ((num&num-1)==0)?"power of 2":"not a power of 2";
            }
        }
    }//end of Inner
}//end of Solution

class DoNotTerminate { //This class prevents exit(0)
    public static class ExitTrappedException extends SecurityException {
        private static final long serialVersionUID = 1L;
    }
 
    public static void forbidExit() {
        final SecurityManager securityManager = new SecurityManager() {
            @Override
            public void checkPermission(Permission permission) {
                if (permission.getName().contains("exitVM")) {
                    throw new ExitTrappedException();
                }
            }
        };
        System.setSecurityManager(securityManager);
    }
}