전체 글 223

[Java] interface, exception, collections

interface 선언: interface (keyword) interface는 class의 특별한 케이스이다. - field는 존재할 수 있다. interface라고 명시된 케이스에서 필드는 무조건 상수로 표현 (public static final 이 붙음) public 어디서든 접근 가능, static 인스턴스 없이 사용 가능, final 상수 필드 - method 존재 인터페이스의 모든 method는 abstract method (선언만, 정의x) ( public abstract 가 붙음) abstract method가 있어서 abstract 하기 때문에 인스턴스를 만들 수 없음 대신 interface를 구현해서 class를 만듬 - 다중 구현(implement)이 가능, 클래스는 다중 상속(ext..

언어/Java 2021.06.25

[Java] this, super, overriding, final, 추상 클래스, 다형성, dynamic binding

System.out.println() System: class의 일종 (=java.lang.System) api로 제공되는 것, java.lang라는 패키지 안에 있는 System 이라는 클래스 java.lang을 생략한다는 것 = import java.lang.System; 이 생략되어 있다는 얘기 ===> 컴파일러가 삽입해줌 "."은 연산자, 앞에는 class 혹은 instance를 가리키는 reference, 뒤에는 field/method out: static field (instance가 없기 때문) System.out 이 . 앞에 있기 때문에 class 혹은 instance이란 걸 알 수 있다. (instance임, 컴파일러가 알아서 만듬) println()은 System.out이라는 insta..

언어/Java 2021.06.25

[Java] 접근 제어자, 상속, is-a관계

Access Modifier (접근 제어자) - package 와 관련 - 총 4종류의 access modifier 존재 1. public (keyword로 존재) 접근에 제한이 없다, 패키지와 상관없이 class가 public이더라도, constructor가 public이 아니면, class에만 액세스 가능하고 다른 패키지에서 인스턴스 생성 불가(생성자 호출이 불가능해서) 따라서 기본 constructor(constructor를 코드에 명시하지 않은 경우 자동 삽입되는)는 public형임. 2. protected (keyword로 존재) 3. default (keyword로 사용x, 다른 키워드가 없으면 기본 적용) 같은 패키지 내에서는 자유롭게 access 가능, 다른 패키지에서는 access 제한 ..

언어/Java 2021.06.25

[Java] Java란?

구조적 프로그래밍과 객체지향적 프로그래밍 1. 구조적 프로그래밍: - 기능별로 나누어서 모듈을 통해 프로그래밍한다. - 장점: 빠르다, 구현이 쉽다 - 단점: 유지보수가 비싸다 2. 객체지향적 프로그래밍 - 현실세계를 묘사해서 프로그래밍한다. - 장점: 빠른 변화에 빠르게 적응할 수 있다. 객체지향적 프로그래밍 어떻게 하면 현실 세계를 묘사할 수 있을까? 1. 구성요소 파악 ex) 은행: 은행직원, 지점, 은행업무 등등 만약 구조적프로그래밍(기능별 분류) 이었다면 은행업무: 예금>입,출금/ 대출>담보,신용 2. 구성요소 간 데이터 흐름 파악 구성요소를 어떻게 프로그램으로 표현하는가? 클래스를 이용해서 현실과 비슷하게 만든다. 즉, 구성요소의 상태(데이터 값)와 행위(행동) 파악해 이를 변수와 메소드로 만..

언어/Java 2021.06.25

[C++] Class

Class https://www.youtube.com/watch?v=2BP8NhxjrO0&list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb&index=18&t=14s Class란? 데이터와 기능들을 묶기 위한 것. Class를 정의하고 instance를 만들어보기 #include #include using namespace std; class Human { //definition of Human string name; int age; }; // need a semicolon at the end int main(void) { Human a; //객체(object, instance) 선언 a.name = "Tara"; a.age = 26; } 이렇게 하면 a.name과 a.age에 에러..

언어/C&C++ 기본 2021.06.25

[백준] 2164번: 카드2

https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 너무 쉬워서 할 말이 없다. 그냥 큐를 사용하면 된다! #include #include using namespace std; int main(void){ queue q; int n; cin >> n; for(int i=1; i1){ q.pop(); q.push(q.front()); q.pop(); } cout

[백준] 18258번: 큐2

https://www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 자꾸 시간초과가 나서 고생했다. 검색해보니 시간 초과가 꽤 나는 문제인 것 같다. 시간 초과가 나는 원인은: 1. 모든 기능을 별도의 함수로 정의하고 함수 콜을 하다보니 시간이 오버된다. 고로 main함수 안에 모든 코드를 때려넣어야 한다. 2. 입출력이 느리다. * 찾아보니, endl 는 스트림을 개행문자 처리 후에 flush까지 해버리기 때문에 더 costly 하다고 ..

[C++] STL vector

vector template class vector; // generic template T : 요소의 type Alloc: 저장공간 할당 모델을 지정. 기본적으로는 allocator 클래스로 지정되어 있다. (가장 간단한 메모리 할당 모델이고, type에 영향을 받지 않는다) 설명 https://www.cplusplus.com/reference/vector/vector/ vector - C++ Reference difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_t www.cpluspl..

언어/C&C++ 응용 2021.06.22

[백준] 11399번: ATM

아주 간단한 문제이다. 그냥 돈 뽑는 시간 제일 짧은 것부터 정렬해서, 각 사람마다 인출 완료까지 걸리는 시간을 출력하면 된다. #include #include #include #include using namespace std; int main(void){ vector people; int n; cin >> n; cin.ignore(); string str; getline(cin, str); stringstream ss(str); int temp; while(ss>>temp){ people.push_back(temp); } sort(people.begin(), people.end()); int result = 0; for(int i =0; i

[백준] 1931번: 회의실 배정

역대급 난이도.. brute force 문제이다. 핵심은 먼저 끝나는 일부터 실행하는 것이다. 먼저 끝나는 일부터 실행할 수 있도록, 회의 시간이 담긴 벡터를 sort해주었다. sort할 때 compare함수를 정의해서 pair 형인 회의들을 정렬할 수 있게 했다. 특히 bool compare(pair a, pair b){ if(a.second < b.second){ return true; }if(a.second == b.second){ if(a.first < b.first){ return true; }else{ return false; } }else{ return false; } } 여기서 중간에 a.second == b.second 이 부분에서 다시 분기해주지 않으면 오류가 난다. 만약 끝나는 시간이..