목록분류 전체보기 (255)
-
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/D2ppr/btrocCPAZCM/mYLLEp15lVnziaLUqSjhxk/img.png)
# 주소 https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net # 문제 # 문제 해설 및 코드 리뷰 import java.util.*; public class Main { static int n; static int arr[]; static int count = 0; public static void main(String[] args){ Scanner scan = new Scanner(System.in); n = scan.nextInt(); arr = new int..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Lp5Dk/btrn1x3vaOm/GSboatD1cHRRtGlE0L03AK/img.png)
# 주소 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net # 문제 # 문제 해설 및 코드 리뷰 import java.awt.*; import java.util.*; public class Main { static int n,m; static int[] arr; static int[] s; static int max = Integer.MIN_VALUE; static int min = Inte..
# 주소 https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net # 문제 # 문제 해설 및 코드 리뷰 import java.awt.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { static int n,m; static char[][] arr; stat..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Bf8WI/btrnPk3as8g/SlUogID6NrRaAovcyIkTdK/img.png)
지난 포스팅에선 SW 솔루션을 다루어봤고 SW쪽으로만 해결하려니 문제가 많아, 이를 하드웨어쪽에서 지원하기 시작합니다. 어떤 것이 있는지 한 번 살펴보겠습니다. - TestAndSet (TAS) Instruction -> Test와 Set을 한 번에 수행하는 기계어입니다. 실 행 중 방해를 전혀 받지 않기 때문에 선점(preemption) 이 이루어지지 않습니다. TAS 명령어입니다. 중요한건 저 구문이 한 번만 수행이 된다는 사실입니다. boolean 타입의 temp 는 target이라는 값을 가집니다. 그리고 이 target은 true로 만들고 temp를 return합니다. 이 동작이 한 번만 이루어 지고 있으며 현재 가진 target의 값을 반환하면서 값을 true로 바꾸는 원리입니다. 이게 한 번..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LTasE/btrnGHreE0p/JGlkW5KvWZ2zSNb2VqxJgk/img.png)
이전시간엔 상호배제의 구문을 짜기 위해 여러 가지 아이디어를 가지고 와서 시도해보았습니다. 결론적으로 제대로 해결되는 것 없이, 계속해서 새로운 문제가 파생되는 모양새가 드러났습니다. 과거 우리의 선배들은 이런 문제에 일찌감치 직면하였고 이에 대한 해결책을 여러 가지 방면으로 연구하셨습니다. 그러므로 이번 포스팅에선 어떻게 앞선 문제들을 해결할 수 있을지 알아보겠습니다. 첫번째로 볼 알고리즘은 Dekker's Algorithm입니다. 최초의 두 프로세스간 ME를 보장하는 알고리즘입니다. 아이디어는 대충 감이오시나요? 앞에서 썼던 아이디어는 flag와 turn중 하나를 썼는데 Dekker는 둘 다를 사용했음을 확인할 수 있습니다. 일단 flag[0] = true라는 것을 모두에게 알립니다. 그리고 P0의 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bcVg1O/btrnEJQmHqo/oD5taxEktrJxB3EUqKBkR1/img.png)
프로세스 동기화라는 것이 있습니다. 우리가 사용하는 컴퓨터들, 운영체제를 보면 프로세스가 여러 개 존재합니다. 이런 시스템을 우리는 다중 프로그래밍 시스템이라고 부릅니다. 그리고 이런 시스템에서 프로세스들은 서로 독립적으로 동작합니다. 즉, 프로세스들이 동시에 동작할 수 있다고도 할 수 있겠습니다. 이런 환경에서 어떤 자원 하나를 두 프로세스에서 동시에 사용하려고 한다고 해봅시다. 그럼 어떻게 될까요? 상황에 따라서는 문제가 되지 않는 경우도 있지만 공유 자원을 동시에 사용하면 문제가 발생할 거라고 짐작할 수 있겠습니다. 예를들어 도화지가 하나 있고 두 사람이 동시에 그림을 그리려고 한다면, 어떻게 되죠?? 우리가 원하지 않는 결과물이 나올 것입니다. 그래서 이런 일이 안생기려면 서로 협의를 통해 약속을..