본문 바로가기

분류 전체보기137

퀵 정렬 대표적인 분할 정복 알고리즘 으로 평균 속도는 O(N*logN)이다 삽입, 버블, 선택 보다는 훨씬 더 빠르다. 포인트는 특정한 값을 기준으로 서로 교환한 뒤에 배열을 반으로 나누는 것! 3 7 8 1 5 9 6 10 2 4 이런 배열이 있다면 가장 앞에 있는 3이 피벗값(기준값)이 된다. 이것을 기준으로 오른쪽으로 가면서 자신보다 큰 값을 찾고 배열의 끝 4부터는 자신보다 작은 값을 찾는다. 찾았다면 서로의 위치를 바궈준다. 3 2 8 1 5 9 6 10 7 4 이렇게 피벗값은 변하지 않은 채로 이 과정을 반복해준다. 3 2 1 8 5 9 6 10 7 4 이 경우 엇갈렸다 라는 표현을 쓰는 데 배열 끝에서부터 피벗값보다 작은 값의 INDEX 값이 오른쪽에서 피벗값보다 큰 값을 찾는 데의 INDEX 보다.. 2021. 10. 30.
삽입정렬 삽입 정렬은 숫자를 적절한 위치에 삽입하는 방법이다. 즉 필요할 때에만 위치를 바꾸면 된다. 8번라인에서 j=i인 이유는 비교할 숫자를 선택하는 것이다 그리고 13번라인에서 j--를 해주는 이미 정렬되어 있는 왼쪽에 배열과 비교하기 때문이다. 위의 array처럼 되어 있다면 10 >4인 경우 임으로 4와 10의 위치를 바꾼다. 그리고 for문으로 가서 2는 10앞에 들어갈 지 4 앞에 들어갈지 비교한다. 이렇게 현재 자신의 왼쪽에 이미 정렬되어 있는 배열과 비교한다. 만약 자신이 왼쪽 배열보다 크다면 반복문에서 벗어나기 때문에 멈춰서 필요할 때만 삽입되는 것을 알 수 있다. 즉 기본적으로 정렬이 되어있다고 가정하면서 돌린다. 이것도 마찬가지로 시간복잡도는 O(N^2) 이다 ※ 만약 거의 정렬되어 있다면... 2021. 10. 30.
버블정렬 옆에 있는 값과 비교해서 더 작은 값을 앞으로 보내는 것! 1회전 했을 때 가장 큰 값이 가장 뒤로 간다! 9번 라인에서 9-i를 해주는 이유는 1회전 할 때 10부터 3까지 다 비교를 하고 그 다음 9까지 8까지 이렇게 끝에서부터 하나씩 줄기 때문이다. 11번부터 13번 라인은 선택과 똑같이 서로의 위치를 교환해주는 알고리즘이다. 버블정렬도 선택과 마찬가지로 데이터 개수가 N개 일때 N * (N+1)/2이다 따라서 O(N^2) 이다. 그러나 빅오표기법은 똑같지만 버블정렬은 선택정렬보다 오래걸린다. 그 이유는 11번에서 13번 라인을 계속 비교하기 때문에 수행시간이 선택정렬보다 더 걸린다. 따라서 가장 비효율적인 알고리즘이라 할 수 있다. 2021. 10. 30.
선택정렬 선택정렬은 말그대로 어떤 기준에 맞는 것을 선택하여 바꾸는 알고리즘이다. 13번까지 array를 돌면서 가장 작은 값을 min에 넣어주고 그 가장 작은 값이 있는 위치를 index에 넣어준다. 그리고 현재 i=0이기 때문에 해당 위치에 있는 값을 temp에 넣어주고 0번위치에 가장 작은 값이 있던 위치의 값을 넣어준다. 그리고 그 처음 i=0의 위치에 있던 값을 index에 넣어 위치를 바꿔주는 알고리즘이다. 이 선택 정렬의 시간 복잡도는 O(N^2)이다. 1 ,2 3, 4, 5, 6, 7, 8, 9, 10 이렇게 10개의 숫자 배열이 있다면 서로 크기를 비교하기 위해 처음에 10번, 가장 작은 값을 찾았다면 그거 빼고 9번, 8번....1번 총 10+9+8+7+...+2+1= 55번 비교를 한다. 이것.. 2021. 10. 29.
AWK AWK AWK의 기능을 디자인한 사람들의 이니셜로 이다. A: Alfred V. W:Peter J. [w]einbergerK : Brian W. [K]ernighan 사용방법 awk [옵션 ] [awk 프로그램 ] [파일명] 형태로 사용 # 옵션 # -F(Field) : 필드 구분자 지정 # -f (file): awk 프로그램 파일 경로 지정 # -v :: awk 프로그램에서 사용할 유효한 특정 값지정 grep 가 행으로 패턴에 해당하는 값을 찾았다면 awk는 열로 패턴에 해당하는 값을 찾는다. #awk 프로그램 기본 구조 pattern { action } 형태 => ex. ) echo -e 'no\title\t\n1\tsubject1' | awk '/sub/ { print }' pattern 을 생략하.. 2021. 10. 27.
명령어 , 파일디스크립터, GREP -------------------------------------------------------- 파일 디스크립터 # 파일의 종류와 상관없이 모든 열려있는 파일을 참조하는 데 사용 # 모든 파일마다 각각의 파일 디스크립터를 가지고 있지만 모든 파일마다 #공통되는 파일 디스크립터가 존재한다. 0: 표준입력 1: 표준출력 2: 표준 에러 $$ pid 확인 proc폴더에 확인가능하다 ls -l /proc/$$/fd를 통해 파일 디스크립터의 정보를 볼 수 있다. exec 0,1,2 :표준 출력을 의미함 [root@localhost fd]# exec 3$4를 통해서 표준입력은 echo를 통해 넣었다. ★모든 파일에는 0,1,2번의 파일 디스크립터가 존재한다. 혹은 3,4번을 주어 만들 수도 있다. ------.. 2021. 10. 26.
매개변수 확장 ${ 변수이름#정규식} : 변수이름의 앞부분부터 가장 짧게 일치하는 정규식을 삭제 변수뒤에 #/를 하니 가장 먼저 있는 /가 사라졌고 #을 누른 후 원하는 문자를 넣으면 그 문자는 삭제된다. * 모든 문자 ${ 변수이름##정규식} : 변수이름의 앞부분부터 가장 길게 일치하는 정규식을 삭제 ##은 가장 길게 일치하는 것을 삭제 한다. 따라서 home을 잇는 것을 지워버렸다. ## 뒤에 붙은 것이 나올 때까지 것을 삭제한다. 이 매개변수는 가장 자주 사용하는 것들중에 하나이다. 이렇게 만약 전체조회가 아니라 sysconfig라는 현재 디렉토리만 보고 싶을 때 사용한다. 위에 것과 반대로는 #가 아니라 % 이다. ${ 변수이름%정규식} ${ 변수이름%%정규식} 치환 VAR안에 값의 /Hello를 /Hi로 바꿔.. 2021. 10. 26.
쉘 명령편집기능 export (부모 쉘의 있는 값을 자식 쉘 까지 가지고 가는 것) export를 하기 전에 TEST를 출력하면 값이 나오지 않는 것을 알 수 있다. 그러나 TEST를 export 한후 자식 bash 쉘에 들어가 출력하지 값이 나온다. 매개변수 확장 { } 를 사용 ex) VAR="this is General Parameter" echo ${ VAR } => 매개변수 확장 모드이다. ${#변수이름} : 변수의 문자열 길이를 출력 친 배열 ${변수이름[인덱스]} : 해당 인덱스 값 출력 ${변수이름[*]} : 해당 배열의 모든 값 출력 ${#변수이름 [*]} : 해당 배열의 모든 값 개수 출력 배열 값들중 나눠서 출력하고 싶은 경우 ${변수이름: N} : N번째 이후의 값들을 출력 ${변수이름:n:m} n.. 2021. 10. 26.
JSTL JSP 표준 태그 라이브러리의 약어 할 수 있는 것 간단한 프로그램 로직 구현 다른 JSP 호출 날짜, 시간, 숫자 포멧팅 지원 JSP페이지 하나를 이용해 다양한 언어의 웹페이지 구성 가능 데이터베이스의 CRUD 가능 XML문서 파싱처리 문자열 처리하는 함수 제공 ※라이브러리 요소 개요 core 변수선언, 실행 흐름제어, 다른 jsp 페이지 이동 formatting 숫자, 날짜 시간 포멧팅, 다른 언어 지원제공 database 데이터베이스 입력 , crud 기능 Xml parsing xml문서 처리 function 문자열 처리 함수 http://java.sun.com/jsp/jstl/core"%> 커스텀 태그라 이것을 위에 작성해야 한다. JSTL 세팅 다이내믹 프로젝트 우클릭 => configure =.. 2021. 10. 19.
jsp useBean JAVA BEAN jsp useBean은 jsp 파일에서 자바코드를 사용하지 않고 값을 가져와 표현할 수 있다. com.bean 패키지에 있는 person 클래스는 이름과 나이를 가지고 있다. 이 클래스의 각 속성을 jsp 파일에서 자바코드를 사용하지 않고 보기 위해서 바로 useBean이 필요하다. com.bean.*를 import 해주어 가져오고 jsp useBean에 세팅을 해준다. m.bean.Person"> 에는 id와 class가 꼭 필요하다. id는 이름을 붙여주는 것이고 class는 사용할 클래스를 패키지에서 가지고 오는 것이다. Person에서 가져온 것을 obj라고 이름을 붙였기 때문에 setProperty로 값을 세팅해줄때 name에 그 선정한 id값으로 해주어야지 값이 제대로 설정된.. 2021. 10. 18.
퍼미션 SUID, SGID, Sticky bit 전 퍼미션을 다룰 때 chmod 를 r : 4 , w : 2, x : 1로 바꿀 수 있다고 하여 chmod 777 이런 식으로 썼었다. 그러나 이것은 0777로 0이 생략된 것인데 SUID SGID 여기서 0이 set(id), sgid이다. => 실행 파일에서만 적용된다. 파일이 실행된 프로세스는 실행한 사용자 소유로 실행 권한이 부여되자만, suid, sgid 를 설정한 파일의 프로세스는 소유자나 그룹 소유자의 id로 실행된다. 실행 권한에 s 로 명시된다. suid : 4000 ,u+s ( suid가 4로 설정되어 있으면 x가 s로 바뀐다. sgid : 2000, g+s 만약 사용자나 그룹사용자 권한이 없다면 s가 대문자로 바뀐다. chmod 4000으로 suid 권한을 주었지만 실행권한이 없어 S .. 2021. 10. 17.
소유권 리눅스 파일 구조 구조 drwxr-x--- 2 root root 4096 Dec 19 12:30 aa 파일종류 퍼미션 하드링크수 소유자 그룹소유자 크기 마지막 변경일자 파일명 퍼미션 구분 파일 디렉토리 r 읽기 파일 목록보기 w 쓰기(수정) 파일 생성(삭제) x 실행 들어가기 1)rwx 2)rwx 3) rwx 1) user 2) group 3) other 표기 (8진수) 퍼미션은 각 문자의 합으로 표현!! r: 4 w: 2x:1ex) rwxr-xr-x: 7(4+2+1)5(4+1)5(4+1)rwxr--r--: 744 chmod (퍼미션 수정 명령) chmod [옵션] [퍼미션] [파일] ※ chmod 명령어는 root나 그 해당 소유자만 사용이 가능하다 chmod -R 옵션을 주면 해당 모든 디렉터리의 권.. 2021. 10. 17.