• 활성화 중인 포트 검색
    • netstat -p tcp -van | grep LISTEN | grep 8080
  •  

'IT > 명령어' 카테고리의 다른 글

윈도우 cmd로 8080 포트 검색 및 죽이기  (0) 2021.07.01

Divide and conquer = 분할 정복

1. Divide    -> 나누기

2. Conquer   -> 나눈것을 해결하기

3. Combine  -> 합치기

단계를 거친다.

ex) 합병정렬

 

Dynamic Programming

다이나믹 프로그래밍을 사용하기 위해 필요한 2가지 조건

1. 최적 부분 구조 (Optimal Substructure)

 > 길찾기에서 최단거리를 구할때 최종단계 바로 단계의 최적값을 구하면
최종단계 값을 간단히 구할 수 있다. 이렇듯 부분 구조의 최적의 답을 구해서 전체의 최적의 답을 찾는 경우를 최적 부분구조라고 한다.

 

2. 중복되는 부분 문제 (Overlapping Subproblems)

 > 피보나치 수열과 같이 fib(5) 알기 위해선 fib(3) + fib(4)값을 알아야하는데
이때 fib(2)가 여러 사용된다. 이런 케이스를 중복되는 부분문제라고 한다.
1.최적부분구조 와 2.중복되는 부분문제 두가지 조건이 충족되는 경우 다이나믹프로그래밍으로 해결 있다.

다이나믹프로그래밍을 구현하는 방법은 2가지가 있다.

1) memozation  (top - down)

 > 재귀함수 기반이기때문에 너무 많이 호출되면 아웃오브메모리

2. tabulation (bottom - up)

 > 중복 계산을 하게되는 단점 존재
 -> 리스트 저장이 아닌 변수 2개로 계산한다면 공간복잡도는 O(1) 활용 가능

 

Greedy

미래를 보지 않고 당장 보이는 최적값을 고름

  • 장점 : 간단하고 빠름
  • 단점 : 최적의 답이 보장되지 않음

 

사용처

  • 최적의 답이 필요없는 경우
  • 당장 보이는 값이 최적의 답을 보장해 주는 경우

 

Greedy Algorithm을 사용해서 최적의 솔루션을 구하기 위한 필수 조건을 모두 고르세요

  • 최적 부분 구조
  • 탐욕적 선택 속성 : 큰값부터 처리하는게 최적의 답인 경우

Map에 HashMap넣는건 동시성 문제생기니 코테때만 사용하기
Value Map은 그냥 Map 2개 만들어서 사용하는게 더 편할듯하다

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


 		/**
         * 1. MAP<String, LIST>
         */

        HashMap<String, List> mapList = new HashMap<>();
        //PUT
        mapList.put("A", Arrays.asList("list1","list2"));
        //GET
        mapList.get("A").get(0);

        /**
        //2. MAP<String, MAP<Key,Value>>
         *
         */
        Map<String, Map<String,Integer>> mapMapOf = new HashMap<>();
        Map<String, Map<String,Integer>> mapMapOfEntry = new HashMap<>();
        HashMap<String, HashMap<String,Integer>> mapMapPut = new HashMap<>();
        Map<String, int[]> mapArr = new HashMap<>();


        /**
         * ※ 수정이 불가능
         * 자바 9버전 이상에서는 Map.of 사용가능
         * 10개 제한

         */
        mapMapOf.put("key1",Map.of(
                                    "mapKey1",1,
                                    "mapKey2",2
                                   )
        );

        System.out.println("mapMapOf = "+mapMapOf);
        System.out.println("mapMapOf = "+mapMapOf.get("key1").get("mapKey1"));
      //mapMapOf.get("key1").put("mapKey1",3);
        System.out.println("mapMapOf = "+mapMapOf);
      //mapMapOf.put("key1",mapMapOf.get("key1").put("mapKey1",3));
        /**
         * ※ 수정이 불가능
         * 10개 이상 초기화 가능
         */
        new HashMap<String,Integer>().entrySet();
        mapMapOfEntry.put("key1",Map.ofEntries(
                                      entry("sndKey1",1),
                                      entry("sndKey2",2)
                                 )
        );

        System.out.println("mapMapOfEntry = "+mapMapOfEntry);
        System.out.println("mapMapOfEntry = "+mapMapOfEntry.get("key1").get("sndKey2"));
      //  mapMapOfEntry.get("key1").put("sndKey2",3);
      //  System.out.println("mapMapOfEntry = "+mapMapOfEntry);

        /**
         * 자바 8버전 이하에서도 사용 가능
         * ※ 수정가능
         */
        mapMapPut.put("key1",new HashMap<String,Integer>(){{ put("sndKey1",1);
                                                          put("sndKey2",2); }});

        //값 얻기
        System.out.println("mapMapPut = "+mapMapPut.get("key1").get("sndKey1"));
        mapMapPut.get("key1").put("sndKey2",3);
        System.out.println("mapMapPut = "+mapMapPut);

        //혹은 map 상시 생성
        HashMap<String,Integer> hs = new HashMap<>();
        System.out.println("=> "+hs.put("sndKey3",3));
        mapMapPut.put("key2",hs);

        System.out.println("mapMapPut = "+mapMapPut);



        /**
         * 맵 배멸
         *  3. MAP<Stirng, int[]>
         *
        */
        mapArr.put("key1",new int[]{1,2});
        System.out.println(mapArr.get("key1")[0]);

        mapArr.get("key1")[0]= mapArr.get("key1")[0]+10;

        System.out.println("mapArr change value => "+mapArr.get("key1")[0]);

'IT > Java' 카테고리의 다른 글

String to Date , Date to String, Time add  (0) 2020.10.19
Eclipse java Working Set 설정  (0) 2020.03.07
interface와 상속 차이 (미완)  (0) 2019.12.22
Java 다중 반복문 빠져나가기  (0) 2019.10.05
02. 상속  (0) 2019.01.15

1. Intelij에서 올리고 싶은 Project Open

2. 상단 메뉴 VCS -> Share Project on GitHub 선택
- Github 계정 연동안되어있다면, 연동

사진 1. VCS 메뉴

 

3. Repository 이름 생성

사진 2. Repository name 설정

 

3. Add할 파일 선택

사진 3. Add할 파일 선택

 

4. 확인

사진 4. 하단 Git Console - Repository 생성 성공 확인

 

사진 5. GitHub - Repository 생성 확인

 

 

'IT > Git' 카테고리의 다른 글

git 강제 pull/push  (0) 2020.11.26
reset, revert, stash  (0) 2020.05.03
Git submodule?  (0) 2020.03.07
Git - tag 긋기  (0) 2019.06.21
Git 개념 (2) - pull / commit / push  (0) 2019.05.22

서버 관리자가 계정 생성시 해야할 일
 - /etc/passwd 파일에 사용자의 계정(ID 및 패스워드)생성
 - /etc/shadow 파일에 계정 패스워드 등록
 - /etc/group파일에 사용자의 그룹생성
 - /home에 사용자의 홈디렉토리 생성
 - FTP사용을 위한 FTP사용 환경설정(셋팅되어있는 경우)
 - 메일사용을 위한 메일환경설정 (apt-get install emailsent)
 - 사용자의 로그인정보 및 환경설정
 - 사용자의 디렉토리 및 파일 소유권 변경 및 확인
 - DB 사용을 위한 환경설정 및 응용프로그램사용을 위한 환경설정
 - 기타 응용 소프트웨어 사용을 위한 설정등



* 계정 삭제

- 계정 + 홈 디렉토리 삭제
 > #userdel -r 계정명

- 계정만 삭제
> #userdel 계정명

'IT > Linux(ubuntu)' 카테고리의 다른 글

ubuntu 웹서버 구축해보기  (0) 2021.11.26
외부접속 설정하기  (0) 2018.12.12
우분투 계정 생성하기  (0) 2018.12.10
Windows PC 에서 ubuntu linux 시작하기  (0) 2018.12.06

우분투 16.04 버전  서버 구축하기

⦁ 우분투 기본 세팅
⦁ Root 계정 비밀번호 설정
Root권한으로 서버를 운영해야 권한 설정을 할 필요가 없기에 Root계정을 생성해야 함


 
/$ sudo passwd root 입력 후 비밀번호 2번 입력 비밀번호 입력할 때 안보이니까 그냥 비밀번호 설정하고 Enter 누르면 됨
이후 /$ su <<라고 입력하고 방금 설정한 비밀번호를 입력하면 root계정으로 바뀜.

⦁ 저장소 변경
FTP가 미국으로 되어있으면 다운받을 때 오래걸리니, 한국으로 바꾸기
저장소를 us.archive.ubuntu.com <<이것을 ftp.daumkakao.com으로 바꾸기
(ftp.daum.net에서 ftp.daumkakao.com으로 바뀌었습니다!)
 


1) /etc/apt 폴더 내에있는 sources.list를 수정할거임
2) 혹시나 에러를 대비해서 백업을 시켜둠
Cp sources.list sources.list.bak
3) 백업됬는지 확인

4)vi를 통해 확인 이후 명령어를 통해 us.archive.ubuntu.com 이랑 security.ubuntu.com을
ftp.daumkakao.com으로 변경


 
위에 보이는 명령어를 사용하던가 아니면
외부에서 ‘sed’ 명령어를 사용하던지 선택
/# sed ‘s/us.archive.ubuntu.com/ftp.daumkakao.com/g’ sources.list
띄어쓰기하면 안댐..
 5) apt-get update & apt-get upgrade를 했을 때 이상없으면 성공


 
Update시 위에 표처럼 ftp.daumkakao.com으로 바뀌면 성공

⦁ Vim 설치
vi편집을 사용할 때 조금 window 편집기능과 비슷한 환경을 위해 다운


 
이거 Enter하고 물어볼 때 ‘Y’한번 더 입력하면 알아서 설치됨
사용할 때 ‘vi 파일명’ 대신 ‘vim 파일명’ 쓰면 됨.
⦁ 아파치, 톰캣 , DB 설치 및 연동
1) apache2 설치


명령어 입력
Netstat –lntp | grep apache2 <<입력하면 아파치 동작 여부 확인가능
Ifconfig 입력하여 IP 확인 후에
인터넷창에 아이피:80 입력 시 apache2 화면 뜨면 성공
2) tomcat7 설치
마찬가지로 apt-get install tomcat7 입력
마찬가지로 인터넷창에 아이피:8080 입력시 It works ! 뜨면 성공

3) 이제 이 두가지를 연동해야함
아파치와 톰캣을 연동해줄 파일


을 다운로드함

그리고
http://ngee.tistory.com/199 사이트를 참고해서 똑같이 따라하면된다.


⦁ Mysql 연동
⦁ Mysql server랑 client 설치
/# apt-get install mysql-server mysql-client

⦁ Apt-get install wine << 설치
⦁ Heidisql 설치 연동은 자동으로 됨 root랑 비밀번호 치면 접속 됨
⦁ Mysql utf-8설정 –설치시 한글 제대로 나오면  안해두 됨
/etc/mysql/conf.d 에 있는 mysql.f 에 아래 내용을 추가함
*********************************************************************
[mysql]
default-character-set=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=utf8
[client]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
출처: http://booolean.tistory.com/366 [boolean]

Test
⦁ spring에서 작업한 파일을 톰캣 webapps 폴더에 복사한다


바탕화면에  있던 것을 tomcat 카탈리나홈 위치인 /var/lib/tomcat7/webapps에 복사함

이후 localhost/’war파일이름’ 을 주소창에 입력하면 테스트 파일을 확인할 수 있다.

 

DB까지 연동되는 것을 확인한 후에는 이제 서비스를 위한 설정을 해야한다.
이것은 DB설정이 마무리 된 이후에 진행하는걸로~

'IT > Linux(ubuntu)' 카테고리의 다른 글

ubuntu 계정생성  (0) 2021.11.26
외부접속 설정하기  (0) 2018.12.12
우분투 계정 생성하기  (0) 2018.12.10
Windows PC 에서 ubuntu linux 시작하기  (0) 2018.12.06

풀이 
> distance 배열을 만들어서 노드의 레벨을 저장해두고, 다음 번 방문시 기존 레벨이 저장되어있으면 레벨 값을 바꾸지 않는다.

코드

import java.util.*;

/**
 * 그래프에서 노드간 최소단거리 탐색 / 노드별 레벨 구하기
 * 간선에 가중치 없음 (크루스칼 아님)
 *
 * 출발은 항상 1번
 * 출발지 1번을 제외한 나머지 노드로 가는 최소값을 가진 배열 return
 *
 */
public class graphSrch {

    public void solution(int[] n, int[][] edges) {
        boolean[] ck = new boolean[n.length];
        List[] link = new List[n.length];
        int[] distance = new int[n.length];
        Stack<Integer> st = new Stack<Integer>();
        Queue<Integer> q = new LinkedList<>();

        int cur = 0;
        int end = 0;
        int cnt = 0;  //레벨

        //거리 초기화
        for(int i =1; i<distance.length; i++){
            distance[i] = n.length;
        }
        for (int i = 1; i < link.length; i++) {
            link[i] = new ArrayList<Integer>();
        }

        //간선 연결 작업
        for (int i = 0; i < edges.length; i++) {
            link[edges[i][0]].add(edges[i][1]);
            link[edges[i][1]].add(edges[i][0]);
        }
        
        //BFS 풀이
        ck = new boolean[n.length];
        cnt = 0;
        //end = i;
        //출발은 항상 1
        q.add(n[1]);
        while(!q.isEmpty()){
            cur = q.peek();
            q.poll();
            if(cnt<distance[cur]){
                distance[cur] = cnt;
            }

            //노드 방문하지 않은 경우 
            if(!ck[cur]){
                //방문 체크
                System.out.println("방문노드 : "+cur+" 현재 level :"+cnt);
                ck[cur] = true;
                //방문지점에서 갈 수 있는 다음 level add
                for(int j=0; j<link[cur].size(); j++){
                    cnt = distance[cur];

                    if(!ck[(int)link[cur].get(j)]){
                        //다음 방문할 노드기 떄문에, 거리는 현재 거리+1, 다음 방문지가 현재 거리보다 큰 경우만 변경함
                        if((cnt+1)<distance[(int)link[cur].get(j)]){
                            distance[(int)link[cur].get(j)] = cnt+1;
                        }
                        System.out.println("next = "+link[cur].get(j));
                        q.add((int)link[cur].get(j));
                    }

                }
                cnt++; // 레벨 증가
            }
        }

        System.out.println(end+"방문 최솟값 : "+cnt);


        for(int i=1; i<distance.length; i++){
            System.out.println(i +" = "+ distance[i]);
        }
    }


    public static void main(String[] args) {
        graphSrch tc = new graphSrch();

        int[] n = {0,1,2,3,4,5,6};
       // int[][] edges = {{1,3},{1,4},{2,1},{2,5},{3,4},{4,5},{4,6},{6,5},{6,2}};
        int[][] edges = {{1,2},{1,4},{1,6},{2,4},{2,5},{4,5},{5,6},{5,2},{6,3}};

        tc.solution(n,edges);
    }

}

1. 8080포트 조회 ( 마지막에 있는 78688이 PID)
> netstat -ano | findstr 8080

사진1. CMD 8080포트 PID 조회 명령어

2. PID 확인 후 프로세스 킬
>taskkill /f /pid 78688

사진2. CMD - PID로 프로세스 KILL 명령어

 

'IT > 명령어' 카테고리의 다른 글

[Mac] 쉘 명령어 정리  (0) 2023.02.10

+ Recent posts