목록분류 전체보기 (255)
-
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cgJk8t/btror1BwAZa/SfG7TKKWSkNsKV9uKEVB30/img.png)
# 주소 https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net # 문제 # 문제 해설 및 코드 리뷰 import java.util.*; public class Main { static int arr[][]; public static void main(String[] args){ Scanner scan = new Scanner(System.in); arr = new int[9][9]; for(int i = 0; i < 9; i++){ for(int j..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2rOfj/btrornET2dV/1XCP2KPlSMmSjDC56Pl57K/img.png)
# 주소 https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net # 문제 # 문제 해설 및 코드 리뷰 import java.util.*; public class Main { static int testcase,node,v; static int arr[]; static List list[]; public static void main(String[] args){ Scanner scan = new Scanner(System.in); testcase = s..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2E9Sj/btrocTSLat7/0ChXq4LJyON0Ly7jKxfOv1/img.png)
# 주소 https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net # 문제 # 문제 해설 및 코드리뷰 import java.awt.*; import java.util.*; public class Main { static int n,m; public static void main(String[] args){ Scanner scan = new Scanner(System.in); n = scan.nextInt(); m = scan.ne..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tiQtm/btrobOclVZL/0p1BJJrzoylKOKflTebo8K/img.png)
MVC라는건 Model - Controller - View의 줄임말이라고 지난 포스팅에서 설명했었습니다. 과거에는 Controller와 View라는 것이 따로 분리되어 있지 않았습니다. View에 모든걸 다 넣어서 개발을 했었습니다. 하지만 요즘은 MVC로 많이 개발하고 있는 추세입니다. 왜냐하면 View는 개발할 때 화면을 그리는데 모든 역량을 집중해야하는데 Model, Controller는 비즈니스 로직이나 내부적인걸 처리하는데 집중해야합니다. 그래서 View를 MVC라고 쪼개게 됩니다. 그러니까, 갈수록 코드의 수는 많아지고 View하나에 DB로직이나 컨트롤러가 막 섞여있으면 유지보수하기 상당히 까다로울 것입니다. 그것이 현재에 와서 이렇게 쪼개지게 되었고 View는 화면에 관련된 일만, 비즈니스 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c4MolX/btrodRS4ITD/WXDeMaSnd1GDMqf8t7bj00/img.png)
지금까지 다루어 봤던 솔루션들은 사실 꽤나 low-level에 속한 솔루션들입니다. 그로 인해 구현하기 어렵다는 단점이 존재하고 에러가 발생할 확률도 올라간다는 단점이 있었습니다. 물론 OS가 support해주면서 성능은 향상시킬 수 있었지만 그에 따른 눈에 안보이는 단점도 존재할 수 있습니다. 따라서 이번 시간에 배워볼 것은 조금 더 가벼운 수준에서 이 상호배제를 풀어나가보려고 합니다. 이번 시간에 배울 솔루션은 명암으로도 구분이 되는 Monitor라는 솔루션입니다. 지금까지 했던 것보다 사용이 쉽다는 특징을 가지고 있는데 어떤 것인지 살펴보겠습니다. 모니터라는 것은 Critical data와 CS영역을 모아놓은 하나의 방이라고 생각하시면 되겠습니다. 예를 들어 책 방인데, 한 방에 한 명만 들어갈 수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ecJwKc/btrob1vIInz/L2Eck16iaBYSoEzUgwKBzK/img.png)
세마포어가 Busy Waiting을 해결하는 좋은 솔루션이 된 것을 지난 포스팅에서 확인했습니다. 하지만 Waiting하고 있는 프로세스를 깨울 때 누구를 깨울지 정해진 것이 없었기 때문에 그것을 정형화하는 룰이 등장하기 시작합니다. 이번에 사용될 아이디어는 은행의 번호표와 비슷한 개념으로서, 대기번호에 따라 프로세스의 순서를 매길 수 있습니다. 그것이 바로 Eventcount / Sequencer입니다. 은행을 가면 번호표를 뽑고 자신의 순서를 기다리며 자신의 번호가 호명될 때 업무를 할 수 있습니다. 여기에선 번호 뽑는 기계를 Sequencer라고 부릅니다. 이 기계는 1씩 증가하며 번호를 매기게 되며 최초 생성시 0으로 초기화를 하고 절대 감소하지 않습니다. 그리고 이 Sequencer는 ticke..