목록분류 전체보기 (271)
전공공부
각각 1개의 돌 또는 3개의 돌을 가져가고 성근이가 무조건 먼저 시작한다. 이때, 돌의 갯수를 주어준다. 이긴 사람을 출력하라 (성근 : SK , 창영 : CY) 원래는 dp로 풀어야 하는데 dp를 나열 해보면 알겠지만 짝수면 성근이고 홀수면 창영이가 출력이된다. dp[1] = true; dp[2] = false; dp[3] = true; ... import java.util.Scanner; public class BOJ_9655_돌게임 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); if(N%2 == 1){ System.out.println("SK"); }else{ Sy..
비트 마스킹 ^ 연산 -> 서로 반대 일 시 1을 출력함 0^0 = 0 0^1 = 1 1^0 = 1 1^1 = 0 | 연산 -> 1이 하나라도 있을시 1출력 1|1 = 1 1|0 = 1 0|1 = 1 0|0 = 0 & 연산 -> 둘다 같을 시 1 출력 > 쉬프트 연산 1 (100(이진수) => 4) 4 >>2 -> (1(이진수) => 1) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BOJ_11723_집합 { public static void main(String[] args) throws IOExce..

위 선을 잘 보면 1 -> 6 -> 12 -> 18 즉, 6의 배수로 늘어나는 규칙을 발견 할 수 있다. 그렇다면 27으로 가기 위해서는 1 + 6*1 + 6*2 + 6*3 = 37 이내이고 1 + 6*1 + 6*2 = 19 이상이다. 그러면 해당 사이인 위치로 가기 위해서는 총 4번을 움직여야 갈 수 있다는 것을 알 수 있다. 13의 경우 : 1 + 6*1 + 6*2 = 19 이내이고 1 + 6*1 = 7 이상이다. 총 3번을 움직여야 갈 수 있다. 이를 구현하면 된다. import java.util.Scanner; public class BOJ_2292_벌집 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ..
문제에서 어떻게 구현해야 하는지 설명해주니 그대로 문제를 풀이하면 된다. package Simulation; import java.util.Scanner; public class BOJ_5073_삼각형과_세_변{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(true){ int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); if(a == 0 && b == 0 && c == 0){ return; } int max = Math.max(a, Math.max(a, c)); System.out.println(change(max, a, b, c));..

OS Thread Scheduler 여러 스레드가 실행 중이면 운영체제의 스레드 스케줄러가 어떤 스레드를 얼마나 오래 실행할지 정한다. 정상적인 운영체제라면 이 작업을 공정하게 수행하지만 구체적인 스케줄링 정책은 운영체제마다 다를 수 있다. 따라서 잘 작성된 프로그램이라면 이 정책에 좌지우지돼서는 안된다. (OS에 따라서 성능이 달라지면 안됌.) 정확성이나 성능이 스레드 스케줄러에 따라 달라지는 프로그램이라면 다른 플랫폼에 이식하기 어렵다. 견고하고 이식성이 좋은 프로그램을 만드는 법 해결방법 : 실행가능한 스레드의 평균적인 수를 프로세서 수보다 지나치게 많아지지 않도록 설계해야 한다. 그러면, 실행가능한 스레드의 수를 적게 유지하는 방법은 없을까? 각 스레드가 일을 마치면 다음 일거리가 생길때 까지 대..
n + 1, m+1 만큼 자리를 띄워서 앉아야 하므로 덧샘을 진행하고 H,W에 대해서 크기를 거기서 나눈 만큼이 남는 크기가 되는데 n+1,m+1로 만들었을때 사각형 외의 부분에도 실제로 사람이 앉을 수 있으므로 Math.ceil을 통해서 남는 자리는 반올림 해버린다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class BOJ_23971_ZOAC4 { public static void main(String[] args) throws IOException{ BufferedReader in = new BufferedReader(new I..

과도한 동기화의 문제 충분하지 못한 동기화도 문제이지만 과도한 동기화도 문제다. 성능을 떨어뜨리고 교착상태(Deadlock)에 빠질 수 있으며 심지어 응답 불가나 잘못된 결과를 계산해내는 안전 실패(safety failure)를 일으킬 수 있다. 응답 불가와 안전 실패를 피하려면 동기화 메서드와 동기화 블록 안에서는 제어를 절대로 클라이언트에 양도하면 안 된다. 1. 동기화된 블록 안에서는 재정의 가능한 메서드 2. 클라이언트가 넘겨준 함수 객체를 동기화 메서드 내부에서 호출 무슨 일을 할지 모르기 때문에 예외를 발생시키거나, 교착상태를 만들거나, 데이터를 훼손할 수 있다. 위와 같은 메서드를 외계인 메서드(alien method)라고 한다. 외계인 메서드 예시 코드 동기화 블럭 내부에서 외계인 코드를 ..
검사 예외의 문서화 검사 예외는 (RuntimeException 및 Error를 제외한 예외들) 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 통하여 정확히 문서화하자. 극단적인 예로 메서드가 Exception이나 Throwable을 던진다고 선언해서는 안된다. 이렇게 선언해버리면 API 사용성을 크게 떨어트릴 수 있다. (상세 예외 케이스를 내어주지 못하니 대처가 힘듦) 위 규칙에는 예외가 있는데 바로 main 메서드이다. JVM에서만 호출하므로 Exception을 던져도 무방하다. 비검사 예외의 문서화 비검사 예외도 정성껏 문서화하면 좋다. 프로그래밍을 하면서 나는 프로그래밍 오류들이 비검사예외인데 이러한 상황을 맞딱트릴 수 있다고 API에서 먼저 문서화 해두면 코..