달력

11

« 2024/11 »

  • 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
2017. 2. 19. 13:01

SegmentTree(구간트리) 알고리즘-자료구조2017. 2. 19. 13:01

어떤 수의 배열이 주어지고, ex) 1, 4, 5, 3, 2  이 중에서 3번째부터 5번째 수까지의 중 최소값을 구하라는 문제가 있다면, 

일반적인 방법으로는 주어진 구간을 순회하면서 최소값을 찾는 과정을 거쳐야 할 것이다. 

한 두번정도라면 문제가 되지 않겠지만, 기본적으로 시간이 O(n)이 걸리기 때문에 질의가 여러번 들어온다면 시간이 많이 소요된다. 

그에 반해 세그먼트 트리를 구현하면 각 질의에 대해서 O(log N)의 시간안에 답을 구할 수 있다.

구현 방법에 따라, 최소값 만이 아니라 최대값이나 구간의 합 등 다양한 응용이 가능하다. 


https://gist.github.com/woo972/aa4934738624c7f0c1eb708c725a39d4


'알고리즘-자료구조' 카테고리의 다른 글

병합정렬(Merge Sort)  (0) 2017.04.29
:
Posted by SK
2017. 2. 18. 12:10

SMTP(Simple Mail Transfer Protocol) 네트워크2017. 2. 18. 12:10

Client Mail Server 메일을 보낼 사용하는 프로토콜이다.

HTTP 다르게 상태를 가지는 Stateful 프로토콜이기 때문에, 전송종료 명령이 있어야 한다.

 

동작방식은 아래와 같다.

 

클라이언트

접속요청 →

메일서버

 

OK

 

 

Mail from(송신자 주소) →

 

 

OK

 

 

Rcpt to(수신자 주소) →

 

 

OK

 

 

메일 데이터 →

 

 

OK

 

 

종료 →

 

 

OK

 

 

메일 서버간 메일 중계시에도 SMTP 사용한다.

 

SMTP POP처럼 인증체계가 없으므로 스팸메일 등에 악용될 있다.

따라서 POP서버의 인증 기능을 활용하거나, 서버의 SMTP 접근을 제한하거나, SMTP Auth(인증체계가 추가)를 사용해야 한다.

'네트워크' 카테고리의 다른 글

MIME  (0) 2017.02.26
POP(Post Office Protocol)  (0) 2017.02.25
Cookie  (0) 2017.02.12
GET / POST  (0) 2017.02.04
HTTP  (0) 2017.01.27
:
Posted by SK
2017. 2. 18. 11:31

패턴변경자(정규표현식 옵션) 정규표현식2017. 2. 18. 11:31

정규표현식을 테스트해보거나 공부할 때 아래 두 페이지에서 많은 도움을 받았다. 

정규표현식 엔진별로 되는게 있고 안되는게 있기 때문에 일부 제한은 있겠지만 기본적인 것은 무리가 없다.


<Site Link>

- 정규표현식을 시각화 해주는 사이트 : https://regexper.com/documentation.html   

- 정규표현식을 연습할 수 있는 사이트 : http://regexr.com/


텍스트에서 대소문자 상관없이 'THE'라는 단어를 검색한다고 하면, (the|The|THE) 처럼 글자들을 쭉 나열해야 할 것이다. 

그런데 패턴변경자라는 것을 사용하면 이를 쉽게 바꿀 수 있다. 주요 패턴변경자로는 아래와 같은 것들이 있다.


- i : 대소문자 구분없이 검색한다. [a-z]로 검색해도 [a-zA-Z]로 검색한 것 처럼 만든다.

- m : 텍스트를 다중 행으로 취급한다. ^$가 텍스트 전체의 끝이 아니라, 한 행의 끝으로 취급된다.

- s : 메타문자 '.'를 모든 문자에 매칭시킨다. 

- x : 공백문자를 찾지 않고 무시한다.

(이 외에도 여러가지가 있는데, 이정도가 자주 쓰일 것 같아서 나머지는 기재하지 않았다.)


검색하는 패턴 앞에 (?패턴변경자)로 써주거나, ex) (?i)the

패턴 구분자 뒤에 붙여서 사용한다. ex) /the/i


위에 기재한 패턴변경자는 Java, perl, PCRE에서 모두 지원하지만 정규표현식의 다른 부분들도 그러하듯, 

패턴변경자에 따라서는 언어나 엔진별로 되는게 있고 안되는게 있다.(사용법도 각각 가능여부가 다른 듯 하다.) 

예를 들어, Linux에서 grep으로 정규표현식을 사용할때는 보통 확장정규표현식을 쓰는 grep -E '패턴' 텍스트명.확장자 꼴로 쓰는데,

여기에서 대소문자 구분없이 쓰려면 grep -Ei xxxx 처럼 grep 자체에 i옵션을 주어야 한다.

단, grep -P 를 사용하면 PCRE 표현식을 사용할 수 있으므로 grep -P '(?i)the' test.txt 와 같이 쓸 수 있지만 

매뉴얼에도 적혀 있듯이, 아직까지는 실험적인 기능이다. 


 -P, --perl-regexp

Interpret the pattern as a  Perl-compatible  regular  expression(PCRE).
This  is  highly  experimental and grep -P may warn of unimplemented features.

StackOverFlow에도 grep -P 사용시 정규표현식은 맞는데 미스매치가 난다는 질문 글이 있다.
업그레이드 후 해결됐다는 글이 있는 걸로 보아, 아직은 사용할 단계가 아닌 듯.


'정규표현식' 카테고리의 다른 글

수량자  (0) 2017.07.30
sed로 텍스트 바꾸기  (0) 2017.04.28
문자클래스  (0) 2017.04.21
비참조 그룹  (0) 2017.03.05
Regular Expressions을 공부하자  (0) 2017.02.12
:
Posted by SK