[BOJ][Java] 1946. 신입 사원
·
💭 Problem Solving/Java
문제https://www.acmicpc.net/problem/1946 문제 이해지원자마다 서류 등수, 면접 등수가 주어진다.한 지원자 A가 다른 지원자 B보다 서류/면접 모두에서 등수가 낮으면 탈락한다.최종적으로 선발될 수 있는 지원자 수의 최댓값을 구한다. 문제 풀이아이디어서류가 더 좋은 지원자를 앞에서부터 보는데, 지금까지 본 사람들 중 면접도 더 좋지 않으면(= 기존 최솟값보다 작지 않으면), 앞선 누군가에게 둘 다 밀리게 되므로 탈락 처리된다.구현서류 등수를 기준으로 오름차순으로 정렬한다.arr[서류 등수] = 면접 등수 형태로 저장한다.앞에서부터 훑으며, 현재까지의 면접 등수 최솟값을 갱신하는 지원자만 카운트한다.맨 처음(서류 1등)은 무조건 선발한다.(ans = 1, minRank = arr[..
[BOJ][Java] 2492. 보석
·
💭 Problem Solving/Java
문제https://www.acmicpc.net/problem/2492 문제 이해가로 N, 세로 M인 지도 위에 금강석 T개의 좌표 (A, B)가 주어질 때,가장 많은 금강석을 포함하는 정사각형의 좌표와 포함 개수를 구한다.정사각형의 변의 길이는 K이고, 꼭짓점은 정수 격자점에 있어야 한다.정사각형 변 위의 금강석도 포함된 것으로 본다. 문제 풀이메모리 초과범위: 1 ≤ N, M ≤ 1,000,000, 1 ≤ T ≤ 100, 1 ≤ K ≤ N, M, 0 ≤ A ≤ N, 0 ≤ B ≤ MN, M이 최대 1e6이라 int[N+1][M+1] 같은 2차원 배열 생성은 불가능하다. (TB급 필요)왼쪽아래 (x, y)를 x=0..N-K, y=0..M-K 전 범위로 전수 탐색하는 것도 불가능하다. (최악 1e12 후보..
[BOJ][Java] 16926. 배열 돌리기 1
·
💭 Problem Solving/Java
문제https://www.acmicpc.net/problem/16926 문제 이해주어진 n x m 크기의 2차원 배열을 반시계 방향으로 r번 회전시킨다.배열은 여러 겹의 레이어(테두리)로 구성되어 있으며, 각 회전마다 바깥쪽 레이어부터 안쪽 레이어까지 순차적으로 회전시킨다. 문제 풀이배열의 회전 가능한 레이어 수: 배열의 가장 짧은 변의 절반만큼 레이어가 존재한다.line = Math.min(n, m) / 2r번 회전할 동안, 각 레이어에 대해 4방향 이동을 반복 수행회전할 때는 현재 위치에서 다음 위치로 값을 덮어쓰기 하므로 맨 처음 값을 임시 저장해두고 마지막에 채워 넣는다. 회전 과정각 레이어에 대해 다음과 같은 방향으로 요소를 한 칸씩 이동→ 오른쪽: 좌측 열 → 우측 열 (0, +1)↓ 아래쪽:..
[Java] 다형성 (Polymorphism) - 정적 바인딩 / 동적 바인딩
·
📝 Study/Java
바인딩(Binding)이란?"어떤 멤버(변수/메서드)를 호출할 때, 그게 실제로 누구를 가리키는지 결정하는 과정" 정적 바인딩 (Static Binding)컴파일 시점에 결정되는 것→ 변수(필드)는 정적 바인딩SubClass subClass = new SubClass();System.out.print(subClass.x); // 👉 "sub"SuperClass superClass = subClass;System.out.print(superClass.x); // 👉 "super"같은 객체를 참조해도 참조 변수의 타입(superClass)에 따라 x가 누구의 것인지 달라진다.→ 필드(x)는 정적 바인딩되기 때문. 즉, 필드(x)는 참조 변수의 타입 기준으로 결정된다. 동적 바인딩 (Dynamic Bind..
[Java] 다형성 (Polymorphism) - 객체 참조
·
📝 Study/Java
하나의 객체가 여러 개의 자료형 타입을 가질 수 있는 것을 객체 지향 세계에서는 다형성이라고 한다.상속 관계에 있을 때 조상 클래스의 타입으로 자식 클래스 객체를 참조할 수 있다. Person person = new SpiderMan(); 메모리에는 SpiderMan 객체가 만들어졌지만,접근할 수 있는 멤버(필드, 메서드)는 Person 타입에 제한된다. class Person { void jump() { ... }}class SpiderMan extends Person { void fireWeb() { ... } boolean isSpider = true;}Person p = new SpiderMan(); // 다형성이 경우 p로 접근 가능한 것jump() ✅ (Person의 메서드)..
[Java] 추상 클래스(abstract class)와 인터페이스(interface)의 차이
·
📝 Study/Java
추상 클래스(abstract class)와 인터페이스(interface)는 둘 다 "추상화(abstraction)"를 위한 수단이지만, 구조, 사용 목적, 의미에는 차이가 있다. 구조 비교 추상 클래스 인터페이스 상속 관계단일 상속만 가능 (extends)다중 구현 가능 (implements)메서드일부만 추상이어도 가능기본적으로 전부 추상 메서드 (Java 8 이후 default/static도 가능)변수일반 인스턴스 변수 허용됨자동으로 public static final다중 상속❌ 불가능 (단일 상속만 가능)✔️ 가능생성자✔️ 있음❌ 없음용도공통 코드 일부 구현 제공동작 명세 (기능 정의) 추상 클래스의 목적👉 공통 기능과 상태를 공유하려고 사용할 때 적합부모 클래스로서 기본 필드나 메서드를 제공하..
[Java] 인터페이스 관련 개념
·
📝 Study/Java
1. 인터페이스 안의 변수는 무조건 public static final인터페이스 안에서 변수를 선언하면, 아무 키워드를 안 붙여도 자동으로 public static final이 붙는다.즉, 인터페이스 변수는 공용 상수로 취급되며, 모든 객체가 공유하고, 값도 절대 바꿀 수 없다.interface MyInterface { int MAX = 100; // 사실은 public static final int MAX = 100; 과 같음} 변수는 상수라서 값을 바꾸면 컴파일 에러 발생MAX = 200; // ❌ 오류! final이기 때문 2. 인터페이스 안의 메서드는 기본적으로 public abstract인터페이스에 메서드를 선언하면, 아무 키워드를 붙이지 않아도 자동으로 public abstract가 붙는..
[Java] 추상 클래스(abstract class) 조건, 목적
·
📝 Study/Java
조건조상 클래스에서 상속받은 abstract 메서드를 재정의하지 않은 경우클래스 내부에 abstract 메서드가 있는 상황이므로 자식 클래스는 abstract 클래스로 선언되어야 함 Java에서는 abstract 메서드(추상 메서드)는 몸체가 없는 메서드즉, 어떤 행동을 "정의하지 않고 선언만 해놓은 것" abstract class Animal { abstract void sound(); // 추상 메서드}이런 sound() 메서드를 상속받은 자식 클래스가 재정의(override) 하지 않으면, 그 자식 클래스도 abstract 클래스여야만 함. 추상 메서드를 갖고 있기 때문. abstract class Animal { abstract void sound(); // 추상 메서드}class ..
[Java] 상속 관련 개념 (접근 제한자, instanceof, super, Sealed class)
·
📝 Study/Java
접근 제한자용도 (제한자가 어디에 사용 가능한가?)제한자클래스 사용생성자 사용멤버 사용publicOOOprotectedOOO(package/private)OOOprivateOOO 접근 가능 범위 (다른 위치에서 접근 가능한가?)제한자같은 클래스같은 패키지다른 패키지의 자손클래스 전체 접근 가능publicOOOOprotectedOOOX(package/private)OOXXprivateOXXX instanceof객체가 특정 클래스 또는 그 하위 클래스의 인스턴스인지 확인하는 연산자 supersuper는 자식 클래스에서 부모 클래스의 멤버(변수, 메서드, 생성자)에 접근할 때 사용하는 키워드 super() – 부모 생성자 호출자식 클래스의 생성자에서 부모 클래스의 생성자를 호출할 때 사용생성자 안에서 반드시..
[Java] 오버로딩(Overloading)
·
📝 Study/Java
오버로딩(Overloading)같은 이름의 메서드를 여러 개 정의하는 것단, 매개변수(파라미터)가 다르면 허용됨. 오버로딩 조건셋 중 하나라도 다르면 OK메서드 이름은 동일해야 함매개변수 개수가 다르면 가능매개변수 타입이 다르면 가능매개변수 타입의 순서가 다르면 가능 오버로딩 가능한 경우public void add(int num1, int num2) { }public void add(int num1, double num2) { }public void add(int num1, int num2, int num3) { }public void add(double num1, int num2) { } 오버로딩 불가능한 경우리턴 타입만 다른 경우: 오버로딩 기준은 매개변수이지 리턴 타입이 아님타입과 개수가 같으면 이..