전체 글

1. Address Binding? 하나의 프로그램이 실행되기 위해서는 프로그램 코드가 어셈블리어로 컴파일되고, 어셈블리어가 기계어로 변환되어 프로세스가 만들어져 메인 메모리에 적재되면 해당 프로세스의 명령어들은 Physical address를 가지게 된다. CPU가 메인 메모리에 적재된 프로세스 명령어를 실행하기 위해서는 Logical address를 알아야 하기 때문에 Physical address에 매핑된 Logical address를 알아내서 프로세스를 처리한다. 이때 Logical address와 Physical address를 매핑하는 과정이 바로 Address Binding이다. Symbolic address VSLogical address VS Physical address Symbolic..
https://www.acmicpc.net/problem/1952 1952번: 달팽이2 M줄 N칸으로 되어 있는 표 위에, 달팽이 모양으로 선을 그리려고 한다. 위의 그림은 M=5, N=3의 예이다. 이제 표의 왼쪽 위 칸(ㅇ)에서 시작하여, 오른쪽으로 선을 그려 나간다. 표의 바깥 또는 이미 www.acmicpc.net 1. Logic 2차원 배열로 BFS를 돌려서 하는 방법도 있고 단순 규칙을 찾아서 풀이할 수도 있다. 2. Code 구현 풀이 #include using namespace std; int n, m; bool vis[101][101]; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; int main() { int n, m; cin >> n..
1. Deadlock이란? 두개 이상의 프로세스나 스레드가 서로의 작업이 끝나기만을 기다리며 무한정 대기하며 자원을 얻지 못하는 상태. 2. Deadlock 해결 방법 Deadlock을 해결하는 방법은 간단히 아래와 같이 요약해볼 수 있다. 1. Deadlock 예방 : Deadlock이 발생하기 이전에 데드락 발생원인 중 하나를 제거함으로써 Deadlock을 예방하는 방법 2. Deadlock 회피 : 각 프로세스가 프로세스를 실행하는데 필요한 정보를 추가적으로 받아서 Deadlock을 일으키지않는다고 판단되면 자원을 할당해주는 방법 3. Deadlock 탐지 : 교착 상태가 발생했을 때마다 복구 기법을 활용하여 시스템을 회복시키는 방법. 4. Deadlock 무시 : 그냥 데드락이 일어날 때 까지 방..
https://www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 1. Logic 달팽이 탐색 부분은 2중 for문을 돌려서 확인하고 움직이는 칸수가 총 2번씩 반복된다는 규칙은 쉽게 찾았지만 저 좌표에 따라 비율 계산을 어떻게 해야하나 고민을 많이했고 아래의 블로그에서 광명을 찾아버렸다.. 댓글을 보니 나 말고도 여러 사람이 광명을 찾고 간듯..? 풀다가 막혀서 블로그를 찾아들어온 과거의 나 같은 사람들을 위해 아래에 블로그 링..
Junit4 환경에서 찍은 강의를 보면서 @Test어노테이션에 해당 테스트의 Exception을 미리 처리하는 옵션을 줘서 처리하는 코드를 봤다. 하지만 나는 Junit5 환경이기 때문에 @Test(expected - ~)옵션이 없어져서 같은 코드를 사용하지 못한다. try catch로 하면 코드가 지저분해져서 expected옵션처럼 깔끔하게 처리하고 싶어서 찾아봤다. 처음 내가 Exception을 처리하고 싶었던 코드는 아래와 같다. try부분에서 Exception이 터지면 catch에서 걸러지고 return해서 테스트가 성공한다. fail()은 만약 return 되지 않고 fail()코드가 실행되면 테스트가 실패하는 함수이다. @Test public void 중복예외() throws Exception..
1. Banker's Algorithm이란? Deadlock을 회피하는 방법 중 한가지로 자원의 갯수가 2개 이상인 사이클에서 데드락을 회피할 때 사용하는 알고리즘이다. 알고리즘이 Banker's인 이유는 은행에서 100만원을 대출하려면 은행이 먼저 100만원을 가지고 있어야 대출해줄 수 있다. 만약 100만원이 없다면 은행은 돈을 빌려줄 수 없다. 이처럼 할당해 줄 수 있는 자원이 충분한지를 먼저 검사하고 교착상태에 빠질 가능성이 없으면 자원을 할당해주는 방식이다. 아래의 그림을 예시로 Banker's Algorithm을 살펴보자 2. 그림으로 살펴보는 Banker's Algorithm 아래 그림은 은행원 알고리즘을 이해하는데 가장 쉬운 그림이다. 차례대로 사용되는 용어를 알아보자면 A, B, C : ..
https://www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 1. Logic 기본 3차원 BFS 문제이다. Z축도 있기 때문에 6방향 탐색을 돌아주면 된다. 예외처리만 잘 해주면 무난히 통과하는 문제이다. 2. Code #include using namespace std; int l, r, c; int sx, sy, sz; char building[31][31][31]; bool vis[31][31][31]; int dz[6] = {0, 0, 0, 0, 1, -..
https://www.acmicpc.net/problem/15661 15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 1. Logic 팀을 꾸릴때 인원이 최대 20명이고 1명부터 팀을 꾸릴 수 있기 때문에 시간복잡도가 19!이 나온다. 이렇게 되면 시간복잡도를 한참 뛰어넘기 때문에 로직을 생각해 봐야 한다. 우리는 두 팀의 능력치의 절댓값을 판단해야 하기 때문에 1, 2, 3, 4의 인원으로 팀을 꾸리면 1,2 를 골라서 팀을 꾸리는 것과 3, 4를 골라서 팀을 꾸려서..
https://www.acmicpc.net/problem/2442 2442번: 별 찍기 - 5 첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다. www.acmicpc.net 1. Logic 컴공과 1학년 C언어 과목 필수 과제이다ㅋㅋㅋㅋ n=5일때를 기준으로 보면 1번째 줄 : 공백 4 / 별 1 2번째 줄 : 공백 3 / 별 3 3번째 줄 : 공백 2 / 별 5 4번째 줄 : 공백 1 / 별 7 5번째 줄 : 공백 0 / 별 9 일반화 시켜보면 0부터 시작하는 i번째 줄을 기준으로 공백의 갯수는 n-i-1 별의 갯수는 1+i*2개이다. 이대로 for문을 작성하면 된다. 2. Code #include using na..
https://www.acmicpc.net/problem/1503 1503번: 세 수 고르기 첫째 줄에 N(1 ≤ N ≤ 1,000)과 집합 S의 크기 M(0 ≤ M ≤ 50)이 주어진다. 둘째 줄에는 집합 S에 들어있는 수가 주어진다. 집합에 들어있는 수는 1,000보다 작거나 같은 자연수이고, 공백으로 구분되어 www.acmicpc.net 1. Logic 일단 입력받은 집합에 있는 숫자를 제외해야하기 때문에 bool배열을 활용하여 제외해야 하는 숫자들을 걸러줬다. 그리고 N의 범위가 1000까지이기 때문에 브루트포싱을 돌려서 1~1001까지 3중 for문을 활용하여 풀이해줬다. 시간복잡도가 1000^3 만큼 나와서 안될 줄 알았는데 내부 테케가 부족했는지 통과됐다. 이게 왜돼? 2초에 2억번 연산이라..
보글보글소다
Conquer Mind, Conquer All