해커랭크 알고리즘
Diagonal Difference | HackerRank
public static int diagonalDifference(List<List<Integer>> arr) {
int firstAdd = 0, secondAdd = 0;
for (int i = 0; i < arr.size(); i++) {
firstAdd += arr.get(i).get(i);
secondAdd += arr.get(i).get(arr.size() - 1 -i);
}
return Math.abs(firstAdd - secondAdd);
}
Number Line Jumps | HackerRank
static String kangaroo(int x1, int v1, int x2, int v2) {
String result = "NO";
double movingNum = (double) (x2 - x1) / (v1 - v2);
if (x2 > x1 && v2 > v1) return result = "NO";
else if (movingNum < 0 || movingNum > 10000) return result = "NO";
else if (movingNum != (int) movingNum) return result = "NO";
else result = "YES";
return result;
}
Save the Prisoner! | HackerRank
static int saveThePrisoner(int n, int m, int s) {
if ((m % n + s - 1) % n == 0) return n;
else return (m % n + s - 1) % n;
}
static String timeConversion(String s) {
int h = Integer.parseInt(s.substring(0, 2));
if (s.substring(8, 10).equals("AM") && h == 12) h = 0;
if (s.substring(8, 10).equals("PM") && h != 12) {
h += 12;
if (h == 24) h = 0;
}
return String.format("%02d", h) + s.substring(2, 8);
}
자바의 정석 12장 지네릭스, 열거형, 애너테이션 학습 시작
컴파일 시의 체크를 해주는 기능
타입의 안정성을 제공한다. → 의도하지 않은 타입의 객체가 저장되는 일을 방지
다룰 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 생략할 수 있다.
지네릭 클래스를 작성할 때, Object 타입 대신 타입변수를 선언한다.
지네릭 클래스의 객체 생성시, 타입변수(E) 대신 실제 타입을 대입한다.
타입변수 대신 실제 타입이 지정되면 형변환 생략이 가능하다.
예제 (일반 클래스와 지네릭 클래스)
일반 클래스
class Box {
Object item;
void setItem(Object item){
this.item = item;
}
Object getItem() {
return item;
}
}
위의 클래스를 지네릭 클래스로 변경하면 클래스 옆에 를 붙이고, Object를 모두 T로 바꾼다.
class Box<T> {
T item;
void setItem(T item) {
this.item = item;
}
T getItem() {
return item;
}
}
여기서 T를 타입변수(type variable) 이라고 한다.
타입변수는 T 이외에 다른 것을 사용해도 된다.
지네릭 클래스인 Box클래스의 객체를 생성할 때는 실제 타입을 지정해주어야 한다.
Box<String> b = new Box<>(); // T 대신 실제 타입 지정
b.setItem(new Object()); // 에러!!! String 이외의 타입 지정 불가
b.setItem("ABC");
String item = b.getItem(); // 형변환 필요 없음