목록콤퓨타 왕왕기초 (156)
파게로그
문제 링크: 1003번 제목 https://www.acmicpc.net/problem/1003 howManyCall(n)은 fibonacci(n)이 fibonacci(0) 과 fibonacci(1)을 몇 번 호출했는지를 return한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Cnt { int cnt0; int cnt1; Cnt(int cnt0, int cnt1) { this.cnt0 = cnt0; this.cnt1 = cnt1; } public int[] getAll() { int[] arr = new int[2]; arr[0] = cnt0; arr[1] = cnt1..
문제 링크: 9996번 제목 https://www.acmicpc.net/problem/9996 파이썬은 어지간해서는 Exception을 발생시키지 않으니 가끔 엣지 케이스를 잡아내기 힘들다는 단점도 있다. 이 문제의 경우, 아래와 같은 코드를 사용할 경우, 길이 체크 부분의 코드가 없으면 "a*a" 패턴에 대해서 "a"라는 파일 이름에 대해서도 결과값을 DA로 내버린다는 함정이 있었다. def compare_string(a, b): if len(a) != len(b): return False for i in range(len(a)): if a[i] != b[i]: return False return True n = int(input()) p = input() star = 0 for i in range(l..
문제 링크: 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..
프로세스는 작업, 또는 time-shared program이기도하지만, 보다 일반적인 개념이다. 프로세스는 작업을 수행하기 위해서 CPU time, memory, files, I/O devices와 같은 자원들을 필요로 한다. 이는 프로세스가 만들어질 때, 또는 실행 중일 때 할당된다. 자원뿐만 아니라, 프로세스가 만들어질 때에는 많은 초기 데이터(input)도 전달된다. 프로세스가 종료되면, 운영체제는 재사용 가능한 자원을 회수할 것이다. 프로그램 자체는 프로세스가 아니다. 프로그램은 하나의 수동적인 entity로서, 디스크에 저장된 파일의 내용과 같다. 반면 프로세스는 하나의 능동적인 entity이다. 싱글쓰레드 프로세스는 하나의 program counter를 가지는데, 이는 실행할 다음 instru..
1.5 Operating-System Operations 현대 운영체제는 interrupt driven이다. events는 항상 interrupt나 trap의 발생에 의해 신호된다. trap(exception)은 소프트웨어에 의해 발생된 인터럽트로서 에러 또는 운영체제의 서비스가 실행되어야 하는, 사용자 프로그램에 의한 특정한 요청에 의한 것이다. 운영체제와 사용자가 컴퓨터 시스템의 HW, SW 자원을 공유하기에, 사용자 프로그램에서의 에러는 실행 중인 하나의 프로그램에 대해서만 문제를 일으키도록 할 필요가 있다. sharing이 존재하는 한, 하나의 프로그램에서 발생한 버그가 많은 프로세스들에 영향을 끼칠 수 있다. 예를 들어, 하나의 프로세스에서의 무한 루프가 다른 많은 프로세스의 적절한 작동을 막을..
문제 링크: 15651번 N과 M (3) https://www.acmicpc.net/problem/15651 depth를 통해 재귀의 깊이를 알 수 있는 것은 굉장히 편리하다! 백트래킹 기본 1을 참고하면 좋다. def print_res(res): string = "" for i in res: string += str(i) + " " print(string) def select(m, res, depth): if depth == m: print_res(res) return for i in range(1, n+1): res[depth] = i select(m, res, depth+1) n, m = map(int, input().split()) res = [0]*m select(m, res, 0)