목록전체 (348)
파게로그
문제 링크: 2748번 피보나치 수 2 https://www.acmicpc.net/problem/2748 이미 계산한 값은 저장하는, memoization을 적극적으로 활용한다. import java.util.Scanner; public class Main { static int MAX = 90; public static long fibo(int n) { long[] arr = new long[MAX+1]; arr[0]=0; arr[1]=1; arr[2]=1; for (int i = 3; i
문제 링크: Lv.2 스킬트리 https://programmers.co.kr/learn/courses/30/lessons/49993 need는 필요한 스킬을 순서대로 담고 있는 char[]이고, need[0~need_idx-1]은 이미 배운 스킬을, need[need_idx~]는 아직 배우지 않은 스킬을 가리키고 있다. 다시 말해서, 만약 선행 스킬이 있는 스킬이고 아직 배우지 않은 스킬이라면, 이는 반드시 need[need_idx]와 같아야만 한다. 같을 때에는 잘 배운거니까 need_idx++로써 배움 처리하고 스킬트리의 다음 스킬을 확인하면 되고, 다를 때에는 해당 스킬트리는 '불가능한' 스킬트리이다. Python def solution(skill, skill_trees): answer = 0 ne..
문제 링크: 15652번 백트래킹 기본 4 https://www.acmicpc.net/problem/15652 cur = i를 통해 현재 숫자를 저장해주고, depth가 증가했을 때 그 숫자부터 삽입할 수 있도록 한다. 백트래킹 기본 1을 참고하면 좋다. def print_list(l): for item in l: print(item, end = ' ') print() def select(n, m, res, cur, depth): if depth == m: print_list(res) return for i in range(cur, n+1): res[depth] = i cur = i select(n, m, res, cur, depth+1) n, m = map(int, input().split()) res..
아직 작성 중인 포스트입니다. 정확히 여기서 보고자 하는 것은, 시제가 아니라 학교 문법 용어로 '시상법'이라 할 수 있다. 우리가 영어 시간에 배웠던 '현재진행', '현재완료', '과거진행' 등에서 '현재/과거'는 시제라는 문법 범주로 설명해야 하고 '진행/완료'는 상이라는 문법 범주로 설명해야 하기 때문이다. 그럼 차례대로 '시제'와 '상'에 대해 알아보자. 시제의 분류 '시제'는 발화시와 사건시의 관계로 나타낸다. 발화시는 말하는 시점, 사건시는 사건이 발생한 시점이다. 사건시가 발화시와 일치하면 현재시제 사건시가 발화시보다 먼저면 과거시제 사건시가 발화시보다 뒤이면 미래시제 시제의 표현 시제의 표현은 기본적으로는 어미를 통해, 그리고 각종 부사 등의 의미를 통해 이루어진다. 여기서 어미 분리가 안..
코드 재사용은, 소스 코드가 아니라 배포 코드(binary code)를 재사용하는 것을 말한다. 배포(수작업) 1. 컴파일: Exam.class 2. 압축: Exam.zip 3. jar(자바를 위한 압축파일이라는 의미로, 확장자를 바꾸면 된다): Exam.jar 배포(IDE) 프로젝트 오른쪽 클릭 -> Export -> General > Archive File (소스코드 배포할 때) (선택) Java > JAR file(압축할 때 컴파일 후 jar로 압축) -> 원하는 파일 선택 -> 디렉터리와 파일 이름(예: examlib.jar) -> Finish 갖다쓰기 (수동) javac -cp "D:\java\examlib.jar" Program.java 새 프로젝트 오른쪽 클릭 > Build Path > Co..
Has A 관계 Has A 관계은, Has A 상속이라고도 하지만 사실상 상속도 아닌 것과 같아서 Has A 관계라고도 곧잘 불린다. 상속에 대해서는 잘 언급되지 않는 개념이지만, 이렇다고 알고 있으면 된다. Python에서는 compositoin으로 def foo(bar):과 같이 사용되고, Java에서는 특별한 문법 없이 포함 관계로서 설명할 수 있다. 캡슐들은 다른 캡슐을 사용하거나, 다른 캡슐에 의해 사용되는 관계를 가지고 있는데, 어떤 캡슐에 다른 캡슐을 포함하는 것을 Has A 관계라고 할 수 있다. Car 클래스와 Engine 클래스가 있을 때, Car 클래스 내에서 Engine 클래스의 인스턴스를 생성한다면 Car Has A Engine이 된다. 이 때 Car 클래스 내에서 Engine 클..
초기화를 위한 특별한 무명의 함수로서, 다음의 조건을 만족한다. 1. 객체가 생성되자마자 무조건, 제일 먼저 실행된다. 2. 생성될 때, 단 한 번만 실행된다. 함수의 이름이 없으며, 정의할 때의 함수명은 초기화할 객체를 한정하기 위한 형식적인 명칭일 뿐이다. 리턴 타입이 정의되지 않는다. 생성자도 오버로딩이 가능하다. 기본 생성자는 컴파일러가 자동으로 만든다. 참조변수가 실체화될 때는 null이, 기본 자료형(값 변수)이 실체화될 때는 0으로 초기화된다. 단, 기본 생성자가 없는 상태로 오버로드만 했다면 기본 생성자를 사용할 수 없게 된다. 그러면 상속에서 여러가지 난제에 마주치게 된다. class Student { String name; int id; // 생성자 overloading public S..
프로세스는 작업, 또는 time-shared program이기도하지만, 보다 일반적인 개념이다. 프로세스는 작업을 수행하기 위해서 CPU time, memory, files, I/O devices와 같은 자원들을 필요로 한다. 이는 프로세스가 만들어질 때, 또는 실행 중일 때 할당된다. 자원뿐만 아니라, 프로세스가 만들어질 때에는 많은 초기 데이터(input)도 전달된다. 프로세스가 종료되면, 운영체제는 재사용 가능한 자원을 회수할 것이다. 프로그램 자체는 프로세스가 아니다. 프로그램은 하나의 수동적인 entity로서, 디스크에 저장된 파일의 내용과 같다. 반면 프로세스는 하나의 능동적인 entity이다. 싱글쓰레드 프로세스는 하나의 program counter를 가지는데, 이는 실행할 다음 instru..