전체 글122 [백준 2606번 / Java] 바이러스 - 노드를 양방향으로 연결시켜야 한다.- bfs로 구현 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { static int N; static int M; static int[] visited; static Map> map; static int count = 0; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Sys.. 2024. 5. 22. [운영체제] PCB(Process Control Block)란? PCB(Process Control Block, 프로세스 제어 블록)는 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳으로, 운영체제 커널의 자료구조이다. 작업 제어 블록(Task Control Block, TCB)또는 작업 구조라고도 한다. - 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다. - 운영체제 입장에서 프로세스 상태 관리와 문맥교환(Context Switch)에 필요하며 프로세스 생성시 만들어지고 주기억장치에 유지된다. PCB에 저장되는 내용- 프로세스의 현재 상태- 포인터- 프로세스 고유 식별자- 스케줄링 및 프로세스의 우선순위- CPU 레지스터 정보- 주기억장치 관리 정보- 입출력 상태 정보- 계정 정보프로세스는 실행 중인 프로그램이.. 2024. 5. 17. [백준 23904번 / Java] A와 B # 시간 복잡도를 계산하여 미리 예측해보자# 더 쉬운 방법을 생각해보자# StringBuilder를 활용하자 처음에 모든 경우를 계산해보는 완전탐색 알고리즘을 이용해서 계산하려고 했다. 코드로 구현하기가 머리아파서 혼자 괴로워하고 있었다... 🤯 그러나 뒤에서부터 계산하면 아주 간단해진다는걸 알게됐다.경우의 수가 2개 뿐이니 역추적을 해보는 것이다ㅠㅠ 이렇게 간단할수가,, import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { static String S; static StringBuilder T; public static void main(Str.. 2024. 5. 14. [백준 1065번 / Java] 한수 등차수열이 되는 모든 경우의 수를 구하는 문제한자리, 두자리 일 때에는 모든 수가 등차수열을 이룰 수 있기 때문에 N값을 그대로 출력하면 되고,1000이 오는 한 가지 경우에는 144를 출력했다. 세자리 수인 경우만 고려하면 됐는데, 111 123 134 146 ... 처럼 i만큼 플러스 한 값, 444 432 420 ...처럼 i만큼 뺀 수열의 경우가 나올 수 있었다. 이 때 111, 222, 333 같은 값이 중복되기 때문에 이 부분을 고려하여 문제를 해결했다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { static String N; st.. 2024. 5. 14. [백준 2390번 / Java] 일곱 난쟁이 이 문제를 풀기 위해 완전탐색 알고리즘에 대해 공부하게 됐다.반복문으로 하나하나 구현하는건 알겠는데 순열/조합의 재귀 방식이 너무 생소했다..관련 문제들을 많이 풀어보면서 익혀야겠다! 순열에서는 비트마스크를 이용해 방문 표시를 하는게 특징인 것 같고 이 문제와 같이 조합에서는 방문 확인 대신 start 값을 하나 증가시켜주면 된다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main{ static int N = 9; static int[] input = new int[N]; static int R = 7; .. 2024. 5. 13. [알고리즘] 비트마스킹(Bitmasking) 비트마스킹이 뭘까? 완전탐색 알고리즘 공부를 하다가 예제에 비트마스킹이 등장했다..학부때도 비트 연산만 나오면 지루하고 그랬는데.. 계속 피할수만은 없으니!! 이번 기회에 손에 잡힐만하게 공부하자!비트 연산 더보기&(AND) : 모두 1이면 1|(OR) : 하나라도 1이면 1^(XOR) : 서로 다르면 1~(NOT) : 반전 비트 이동 연산자연산식설명x 정수 x의 각 비트를 y만큼 왼쪽으로 이동시킨다. (빈자리는 0으로 채워짐)x >> y정수 x의 각 비트를 y만큼 오른쪽으로 이동시킨다. (빈자리는 정수 x의 MSB;최상위비트로 채워짐)x >>> y정수 x의 각 비트를 y만큼 오른쪽으로 이동시킨다. (빈자리는 0으로 채워짐) 비트마스크란?비트마스크(bitmask)란 정수의 2진수 표현을 자료구조로 쓰는.. 2024. 5. 13. [백준 1620번 / Java] 나는야 포켓몬 마스터 이다솜 26개의 포켓몬 도감을 만들고 각각의 번호와 이름을 자유롭게 가져올 수 있는 코드를 작성해야 한다.처음에는 배열에 스트링 값을 넣어서 정렬할까 했지만 그렇게 되면 순서 번호를 가져올 수 없다는 문제가 있었다숫자로 빠르게 찾아올 수 있도록 순서대로 넣은 배열,이름값으로 빠르게 찾아오기 위한 맵 도감을 하나 만들어서 해결했다. 맵은 레드 블랙 트리로 구현되어 있기 때문에 삽입, 삭제 시에 시간복잡도 O(logN)을 가진다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import java.util.StringT.. 2024. 5. 11. [알고리즘] Dynamic Programming 1. DP란?DP(Dynamic Programming)란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 수학자인 리처드 벨만이 1940년대에 사용하던 용어였다. 1953년, 벨만은 큰 문제 안에 작은 문제가 중첩되어있는 문제를 해결하는 데 사용하는 이 방법을 '동적 계획법'이라 이름붙였다. 이와 같은 다이나믹 프로그래밍은 부분 문제 반복과 최적 부분 구조를 가지는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다고 알려져 있다. 부분 반복 문제(Overlapping Subproblem)예를 들면, 피보나치 수열과 같은 문제이다. 피보나치 수열을 구하는 문제는 여러 개의 부분 문제(Subproblem)으로 쪼개질 수 있다. 모든 문제를 부분 문제로 쪼갤 수 있고,.. 2024. 5. 10. [자료구조 Heap / Java] cs 스터디의 첫 주 과제인 Heap! 다음 영상을 보고 공부했다 👍🏻https://www.youtube.com/watch?v=i9v-Q65d7wE&list=PLlTylS8uB2fCoXCVtfJ0wzotOU8a3ti6M&index=5 힙(Heap)은 이진 트리의 응용 버전이다.- 완전 이진트리 형태의 자료구조- 일차원 배열로 구현- 데이터의 삽입과 삭제 시간이 빠르다: O(log N)- 일반적으로 그룹을 정렬하거나 입력된 데이터 안에서 최소/최대 값을 찾을 때 사용한다.- 중복을 허용한다.힙의 종류는 두 가지, 최대 힙과 최소 힙으로 나뉜다.- 최대 힙(Max Heap) : 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큼- 최소 힙(Min Heap) : 부모 노드의 키 값이 자식 노드의 키 값.. 2024. 5. 10. 이전 1 ··· 9 10 11 12 13 14 다음