Hard deck 143

002 : Array에 점수 저장하여 평균 구하기

점수기준은 100이 아닌, 최고점을 기준으로 보정되므로 다시 100 기준으로 점수를 봤을떄 올라가는 경향이 있다 max와 sum(plate) 를 한번에 계산하여 바로 투입 import java.util.Scanner; public class Main { public static void main(String[] args) { // ISC Scanner sc = new Scanner(System.in); int V = sc.nextInt(); // D2F int max = 0; int plate = 0; int[] TP = new int[V+1]; for (int i = 1; i

009 : sliding window

TP는 capacity도 필요없이 단순히 tocharArray()로 분배시켜주며 됨 myArr(focus locked) -> checkArr(char > int checker) -> checkSecret(int target) 각 알파벳에 임의의 숫자를 부과하면 int[] Array로 connect 시킬 수 있다 알파벳(char) - 알파벳pointer(int) - 알파벳수량value(int) 지금 lock된것을 개별 char로 보낸다 각 알파벳 갯수가 충족되면(0은 0) checkSecret에 1을 더하고, 해당 bottom이 4 높이로 올라가면 counter++;한다 SP로 넣고, 양 끝을 더하고 빼면서 작업 SP 작업시 모든 알파벳 필요갯수가 0인 경우에는 모든 선형 공간마다 pipeline으로 빠져..

008 : 좋은 수 구하기

여러번 target의 tC이므로 선형 공간 필요 문제의 조건에서 재료들은 0일수도 음수일수도 있으므로 타겟에 부합해도 pointer 검증 필요 for문 밖으로 cable 연결해야 되는것은 for문 밖에서 연결해서 프로그램에서 plate or receive해서 나올것 좋은 수는 여러 조합이 필요한 것이 아닌, 단 하나의 조합으로도 조건은 충족되므로 해당 타겟에서는 그 즉시 break로 빠져나온 뒤 바로 다음 것으로 넘어간다 s의 dd는 ++;이고, e는 --; 이므로 조합이 T와 비교하여 크거나 작을 때 옮길 Pointer는 정해져 있다 *(2 pointer와 binary search의 차이) - 둘 다 s, e, connector, check-in(target)이 필요하지만 binary search : ..

007 : 투 포인터 > 무작위 배열의 2가지 합

오름차순 정렬 필요 counter에 마킹되면, s++ e-- 두번다 이동 필요 br 닫아주기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { // ISC BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readL..

006 : 투 포인터

pointer = value일 때 connector가 필요없을수도 있다 e = N일의 케이스 1개는 별도로 두고 시작한다 pointer의 driving direction은 모두 ++; 그러나 사잇값을 얘기하므로 - e는 움직이고 다음값을 포함하고 - s는 현재값을 버리고 다음으로 움직인다 *plate가 N이 되고 나서 s++ 먼저 할 수는 없는지? > 상관없음 어차피 다음 N까지 모두 check-in되는 개념 import java.util.Scanner; public class Main { public static void main(String[] args) { // ISC Scanner sc = new Scanner(System.in); int N = sc.nextInt(); // OP int coun..

030 : 블루레이 만들기

개수(counter)와 용량(plate set)은 반비례 관계 용량 기준으로 binary search를 진행하되, 용량이 초과시에 직전까지 것을 하나의 plate로 담음 해당 pointer의 TP[i]는 들어가지 않고 reset 후 다음 Plate로 들어감 같은 논리로, 직전까지 처리되고 해당것은 다음에 반영되는 TP-OP 구조로, 맨 끝 TP[V-1]가 남아있다면 추가 plate 할당 필요 counter가 3개보다 크다면 용량을 늘릴 필요가 있다 s T) s = m+1; else e = m-1; } // OEC System.out.println(s); } }

071 : 구간 합 구하기 3

size는 총 2번을 커버해야 한다 - bottomline의 수들과 - 그 수들의 합을 계산할 수 있는 slot들 "1에서 다시 2배씩 현재 수까지 도달하는 로직" > 현재 수가 1이 될때까지 exp /= 2; 하는동안 counter(exponent)를 1씩 올린다면, 총 2회가 나옴 > 그런데 5~7 사이의 수라면 감가된것이 있으므로 exp + 1; > bottom에서 위로 올라가면서 계산하는 slot을 위해 다시 (exp+1) + 1 5는 사실 8에 귀속되어야 하지만, 몫을 나눠서 height를 구하는 방식은 4에 귀속 됨 즉 4까지 8을 사용하는 것 2^3은 8, 그리고 bottom 한줄은 나머지 층수의 모든 노드 수와 동일함 기수와 서수 차이 15부터 역순으로 1까지 그러나 3과 2로 계산되어 1..

068 : 리프 노드의 갯수 구하기

DFS같은 recursive에서 - plate를 바로 return하거나 - print하기 어렵다 > 그래서 plate를 waterfalling variable로 만들어 main에서 print한다 부모 > 자식노드로 진입하기만 한다면 leaf가 생기는 것이고, 특정 노드(우선은 부모 노드로 간주)에서 자식으로 진입되는 게 아무것도 없다면(여기서는 deleteTarget 포함) plate 추가 부모-자식 쌍으로 유입하되 root는 별도 관리 root와 deleteTarget Lock 별도 관리 import java.util.ArrayList; import java.util.Scanner; public class Main { static ArrayList[] TP; static boolean[] visited..