​​


라멘이랑 맥주 조합 최공 🥰

'Diary' 카테고리의 다른 글

선릉 착한고기  (4) 2019.01.31
역삼 민들레떡볶이  (3) 2019.01.30
역삼 전봇대  (2) 2019.01.23
역삼 광역시맥주8220  (1) 2019.01.12
유스토리 블로그 테스트  (1) 2019.01.09
멀티 스레드 Multi Thread

멀티 스레드 Multi Thread

프로세스 : 실행중인 프로그램

프로그램 : 만들어졌는데 아직 실행되지 않고 하드디스크에 저장된 상태

 

스레드 : 프로세스를 실행시켜 준다.

main이 쓰레드다. main이 없으면 실행 안됨.

 

 

  • 멀티쓰레드의 장/단점

    • CPU사용률 향상
    • 응답성 향상
    • 자원 공유 -> 효율성 증대
    • Context Switching 비용 발생

 

  • 자바에서는 멀티스레드의 순서가 보장되지 않는다.

 

 

메소드 상태(cycle) - 5가지.

 

 

running 이후 할당된 시간이 끝나면 다시 runnable 상태로 대기줄에 서게된다.

  • new => runnable 로 갈때 꼭! start() 라는 메소드를 호출해줘야 한다.
  • yield()

    running에서 양보하라고 메소드를 호출할 수 있다.

    runnable 대기큐를 체크해서 자기보다 우선순위가 높거나 같은애가 있다면 양보한다.

    우선순위가 높은애가 없으면 양보하지않는다.

 

 

< Thread를 만드는 방법 두가지 >

  1. Runnable 인터페이스 구현

 

  1. thread 클래스 상속

 

 

if ) 어떤 클래스에서 thread를 써야겠다.

-> 아무것도 상속받지 않은 상태라면 implements도 되고, 상속도 됨.

-> 어떤 클래스를 상속하고 있다면 implements만 가능

(공통) 쓰레드가 해야하는 작업내용이 들어있는 메소드를 만들어놔야한다.

 

 

callback method

 

 

 

<실행결과>

 

캡처

Thread객체 생성시 parameter로 Runnable 타입의 객체를 받을 수 있다.

 

 


  1. main에서 m 생성
  1. 생성자로 들어가서 thread t 생성
  2. t.join (); //Waits for this thread to die
  3. main이 t스레드가 끝날때까지 기다려줌
  1. main thread 실행

    **) main thread가 우선순위가 더 높기때문에 default상태로는 먼저 실행

 

'Computer Science > Languages' 카테고리의 다른 글

[java 예외처리]Try-with-resources  (2) 2019.07.11
java tip  (0) 2019.02.18
[java] 예외처리  (2) 2019.01.24
[java] Collection 활용  (0) 2019.01.17
[java] interface  (0) 2019.01.16

메소드 선언할때는 throw

실제로 사용할떄는 throws


stream

1. 입력용 - InputStream(데이터 읽어오는 스트림)

   출력용 - OutputStrema(데이터 출력하는 스트림)


2. 데이터 전송 단위

 bytue Stream(1 byte에 코드값을 담아 전송하느 스트림); InputStream/OutputStream

 character Stream(2 byte에 코드값을 담아 전송하느 스트림); Reader / Writer


3. 데이터와의 연결 여부

  Node Stream(데이터와 직접 연결되어 있는 스트림)

  Process Stream(Filter Stream) Node Stream으로부터 데이터를 받아 가공하는 스트림


  • 접근지정자

    자식이 범위가 더 커지는건 ok

    좁아지는거 안됨

  • 예외처리

    자식이 더 큰 예외를 throw하면 안됨.


메소드 이름 선언할때는 throws

실제로 발생시킬 때는 throow

'Computer Science > Languages' 카테고리의 다른 글

java tip  (0) 2019.02.18
[java] 쓰레드(Thread)  (0) 2019.01.24
[java] Collection 활용  (0) 2019.01.17
[java] interface  (0) 2019.01.16
[Java] final, static  (0) 2019.01.16



얻어걸린 맛집
담엔 막걸리 먹는다 무족건

'Diary' 카테고리의 다른 글

역삼 민들레떡볶이  (3) 2019.01.30
역삼 호타루  (2) 2019.01.25
역삼 광역시맥주8220  (1) 2019.01.12
유스토리 블로그 테스트  (1) 2019.01.09
사이트맵  (0) 2019.01.08
배열

배열

순차적 접근속도 가장 빠름.

비순차적 삽입/삭제

크기 변경 불가

 


 

List

순서가 있으므로, 데이터의 중복 허용.

ArrayList

내부적으로 배열로 구현

배열크기 변경 가능. --> 크기를 미리 모를때 사용

순차적

 

LinkedList

Node로 구현

비순차적 삽입/삭제에 최적

접근성이 떨어진다. (인덱스가 없으므로 처음부터 하나씩 방문해야 함)

 

Set

 

순서가 없다.

주머니에 구슬을 넣는 모양. (중복된 데이터를 넣으면 구분이 불가능하므로 허용하지 않는다.)

중복불가. 중복된 데이터가 삽입 시도 -> 원래 데이터만 살아남고 중복된 데이터 삽입 불허.

HashSet

hasing기법을 사용해 중복 체크 O(1)

데이터가 많을떄 빠르게 검색할수 있는 가장 좋은 자료구조

 

TreeSet

Binary Search Tree로 중복 체크 O(logN)

정렬을 자주 실행해야 하는 경우.

 

Map

키 : 값

"바나나" : 5000

"사과" : 5000

key로 값을 구분할 수 있기 때문에 중복허용

단, key는 중복될 수 없다.

만약 중복 키가 들어오면 --> 덮어쓰기. (기존데이터 지우고) <Set과 비교>

왜? 키는 중복되더라도 새로운 데이터가 있을수 있기 때문.

HashMap

데이터가 많을떄 빠르게 검색할수 있는 가장 좋은 자료구조

 

TreeMap

정렬을 자주 실행해야 하는 경우.

 

'Computer Science > Data Structure' 카테고리의 다른 글

해시테이블 Hashtable  (2) 2019.05.06
Merge Sort 병합정렬  (4) 2019.01.29

문제 >> 1809 : 탑



- 탑의 정보를 담는 클래스 Tower. 탑의 번호(number)와 높이(size)를 저장.

- 최종 출력할 답을 담을 list

- 입력 순서대로 스택에 넣어준다.

- 이 때 스택이 비어있다면, 현재 탑의 레이저를 수신할 수 있는 장치는 없다. ==> list에 0을 넣어준다. list.add(0)

- 스택이 비어있지 않다면 ..

  가장 위에 담아있는 tower의 정보를 peek 한다.

  만약 peek 한 tower의 size가 현재 탑보다 작다면, pop한다. (현재 tower의 높이가 더 높기 때문에, 앞으로 어떤 탑의 레이저도 수신할 수 없다.

  현재 탑의 size보다 큰(즉, 현재 탑의 레이저를 수신할 수 있는) tower가 나올때까지 pop을 반복한다.

  현재 탑의 size보다 큰 tower를 만나면, 그 tower의 number를 list에 add 해주고, 현재 탑을 push 해준다.

  만약 pop을 반복하다 스택이 비면, 현재 탑의 레이저를 수신할 수 있는 탑이 없다는 뜻이므로, list에 0을 add해주고 현재 탑을 스택에 push한다.

- 최종 list를 출력한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
 
class Tower {
    int number;
    int size;
     
    public Tower(int number, int size) {
        this.number = number;
        this.size = size;
    }
}
 
public class Main {
    public static void main(String[] args) {
         
        Scanner sc = new Scanner(System.in);
         
        //int T = sc.nextInt();
         
        //for(int t=1;t<=T;t++) {
            Stack<Tower> stack = new Stack<>();
            ArrayList<Integer> list = new ArrayList<>();
            int N= sc.nextInt();// 탑의 수
            int now=0// 탑의 높이
            int idx=0;
            //int[] ans = new int[N]; //answer
            for(int i=0;i<N;i++) {
                 
                now = sc.nextInt();
                 
                if(stack.empty()) list.add(0); // 스택이 비어있으면 앞에 건물이 현재건물now보다 낮은 건물이거나 처음으로 넣는 건물
                else {
                    while(!stack.empty()) {
                         
                         
                        if(stack.peek().size < now ) { // 스택에 있는 건물이 지금 넣으려는 건물보다 낮으면  pop
                            stack.pop();
                            if(stack.empty()) list.add(0); // 낮은 건물은 계속 pop하다가 스택이 비어 있으면 리스트에 0을 추가
                             
                        } else {
                            list.add(stack.peek().number); // 스택에 있는 건물이 지금 넣으려는 건물보다 높으면 그 값을 list에 추가
                            break;
                        }
                    }
                }
                stack.push(new Tower(++idx,now));
            }
             
            //System.out.print("#"+" ");
            for(int i=0;i<list.size();i++) {
                System.out.print(list.get(i)+" ");
            }
            System.out.println();
        //}
    }
}
cs

순열 흐름도


n P k

재귀함수 종료조건 if( len == k )

즉 고른 숫자의 길이가 K일때 함수 종료.


흐름도에서 밑으로 레벨이 한단계 깊어질 수록 len이 +1 된다.

k = 1이면 len=1까지 (1레벨)만 진행되고,

k = 4일때 (즉 , 4 P 4 ) 일때 가장 깊은 레벨까지 재귀함수가 실행된다.


종료 조건 안의 배열 print는 len==k 길이 만큼 된다.

크기가 4인 배열의 함수에 숫자가 들어있어도 len(=k)만큼만 출력된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <memory.h>
int n = 2//n개를 골라라
int m = 4//인덱스범위
int arr[4];
int idx[4]={0,1,2,3};
 
void permutation(int len){
    if(len == n){
        for(int i=0 ;i<len;i++){
            printf("%d ", idx[i]);
        }
        printf("\n");
        return;
    }
    
    for(int i=len;i<m;i++){
        swap(i,len);
        permutation(len+1); //len을 증가시키기 위함
        swap(i,len);
    }
    
    
}
 
int main(int argc, const char * argv[]) {
    
    permutation(0);
 
    return 0;
}
 
cs


'Computer Science > Algorithms' 카테고리의 다른 글

[java] Dijkstra 다익스트라 알고리즘  (0) 2019.02.19
Kruskal 크루스칼 알고리즘  (0) 2019.02.18
DisjointSets  (0) 2019.02.18
[java] Insertion Sort 삽입정렬  (0) 2019.01.28
Dijkstra 최단경로 알고리즘  (2) 2019.01.08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
jpackage com.util;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class CollectionTest {
    public static void main(String[] args) {
        List fruits = new ArrayList<>();
//        fruits.add("apple");
//        fruits.add("orange");
//        fruits.add("banana");
        
        //1.addAll
        Collections.addAll(fruits, "apple","orange","banana");
        
        //2. sort
        Collections.sort(fruits);
        System.out.println(fruits.toString());
        
        //3. search
        Collections.sort(fruits);
        System.out.println(Collections.binarySearch(fruits, "banana"));
        System.out.println(Collections.binarySearch(fruits, "grape"));
    
        //4. copy
        List list = new ArrayList();
        Collections.addAll(list, "one","two","three","four");
        Collections.copy(list, fruits);
        System.out.println(list.toString());
        
        //5. fill
        Collections.fill(list, "filled with dummy data");
        System.out.println(list.toString());
    }    
}
 
cs


'Computer Science > Languages' 카테고리의 다른 글

[java] 쓰레드(Thread)  (0) 2019.01.24
[java] 예외처리  (2) 2019.01.24
[java] interface  (0) 2019.01.16
[Java] final, static  (0) 2019.01.16
JAVA 입출력  (2) 2019.01.08

+ Recent posts