목록분류 전체보기 (49)
걸음마부터 달리기
정렬방법을 따지는 문제는 아닌거같고 임의의 정렬이 나왔을때 어떻게 구현할건지에 대한 문제이다. 임의의 기준 정렬은 1) Comparator() {public int compare(T o1, T o2) {~}}를 통해 정렬기준을 오버라이딩 및 익명객체로 Arrays.sort에 전달 2) String의 사전식 정렬은 이미 Comparable의 compareTo 메서드에 구현이 되어있다.import java.util.*;import java.lang.*;import java.io.*;// The main method must be in a class named "Main".class Main { public static void main(String[] args) throws Exception { ..
5초인데 천만개를 받고 자리수가 10000보다 작으니까 2^100보단 무조건 작다. 따라서 O(nlogn)은 된다는건데... 그래서 Arrays.sort 하면 평균값 O(nlogn), 최악 O(n^2)이니까 이건 불확실하다. (O(n^2)을 저격하는 테케가 있으면 안되겠지...)그러면 안전하게 풀려면 O(n)과 유사하게 풀어야된다는거같은데...이러면 O(Kn)을 가지는 기수정렬을 써야한다. 큐에 넣어도 되지만 나는 그냥 bucket이라는 배열을 만들어놓고 각 끝자리에 맞게 index 맞춰서 넣었다.중요한게 bucket에 넣고 이 순서대로 다시 빼고,그 순서로 다시 bucket에 넣어서 다음 자리 기준으로 정렬한다.이걸 최대 자리 수만큼 반복하면 된다. 문제는 이 과정에서 "합배열" 을 사용한다. 어떠한 ..
구축 전에 DNS 개념을 아래 블로그에 매우 잘 정리해놨기에 읽어보고 넘어가자.https://blog.naver.com/fullhdcctv/20205268692 DDNS란 무엇이고 왜 필요한가?DDNS란 무엇이고 왜 필요한가? 요즘 급속하게 번져가고 ...blog.naver.com https://namhyo00.tistory.com/70 DNS 계층 구조DNS란 Domain Name Space의 약자이다. 우리는 네트워크 상에서 Host를 식별하기 위해 IP주소를 사용한다. 하지만 일반적으로 우리는 도메인 이름으로 사이트에 접속하는 경우가 대부분인데, 이 또한 최namhyo00.tistory.com https://www.youtube.com/watch?v=Q0EgiHhw-E4
학교 동아리방 내 서버가 뚫려있는걸 보고 이걸 어케 했나 궁금해서 작성한다.머릿속에서 전공때 들은 파편화된 지식을 정리했다. 사건발생: 서버컴퓨터는 준비되어있고 학교 동아리방에 서버를 설치하는 과정공인IP 할당해달라고 했다가 과사에서 개털림다음날 와보니 터널링 + 포트포워딩을 이용하여 일본 프록시서버를 통해 서버가 뚫려있음. (여기서부터 어떻게 뚫은건지 궁금해졌음) 학교 네트워크가 어떻게 되어있는지 먼저 알아야해서 학교 정보전산원 사이트에 들어가봄. 보면 L3스위치(라우터)가 37개인데 학교 건물은 39개임. 39개 중 플랜트나 이거저거 굳이 필요 없는곳 제외하면 딱 건물당 한개씩 라우터 할당을 받은거같음.위 첫번째 사진은 타대학 중 내가 생각한 우리학교와 유사한 구조인거 같아서 가져와봤다.(거의 모든 ..
import java.util.*;import java.io.*;public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); int n =Integer.parseInt(st.nextToken()); int[] arr..
Arrays.sort하면 끝나긴 하지만 머지소트로 구현해봤다.import java.util.*;import java.io.*;public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); String n = st.nextToken(); char[] arr = n.toCharArray(); int[] numArr = new int[arr.length]..
어려운문제는 아니다. 그냥 뒤집고 정렬하고 출력하면 된다.Arrays.sort(배열)의 시간이 최악의 상황에서도 O(nlogn)이라 그냥 애매하면 내장함수가 젤 빠르니까 이걸 쓰면 되긴 한다.하지만 퀵소트를 공부하는 입장에서 구현해보고 있기에 내장함수로 한번 , 퀵소트로 한번 구현해봤다. 시간은 10^6의 입력값 n에다가 정수가 10^12를 벗어나면 안되니까 내 코드에서는 12자리, 즉 하나의 숫자당 최대 12번을 탐색하면서 숫자를 거꾸로 뒤집는다. 정렬할때 브루트포스의 O(n^2)의 짓거리만 안하면 다 통과된다. import java.util.*;import java.lang.*;import java.io.*;// The main method must be in a class named "Main"...
퀵정렬 구현 결론: high와 low의 교차가 핵심이다. high와 low가 같을때 기준이 아니다. 따라서 low또한 low는 가만히 있고 high를 계속 땡겼을때도 같을때가 기준이 아닌 교차 기준이니까 while(startIndex+1=high && arr[pivot] high--; } high도 가만히 있고 low를 계속 땡겼을때도 같을때가 기준이 아닌 교차 됐을때가 기준이여서 비록 low가 array 범위 밖으로 나가도 된다.while(low=endIndex&& arr[pivot]>arr[low]){ low++; }import java.util.*;import java..