컴퓨터에서 문자 표현
1967년, 미국에서 ASCII 라는 문자 인코딩 표준 제정
확장 아스키는 굳이 몰라도 됨

국가간 정보를 주고 받을 때 아스키에 문제가 생겼다.
자국의 코드체계를 타 국가가 가지고 있지 않으면 정보를 잘못 해석 할 수 밖에 없었다.
다국어 처리를 위한 표준을 마련했다.
다시 Character Set으로 분류된다.
기존 유니코드의 표준인 UCS-2나 UCS-4는 유니코드를 저장하는 변수의 크기를 정의하지만 바이트 순서에 대해 표준화 하지 못했고, 적당한 외부 인코딩이 필요하게 되었다.
big-endian
little-endian
UTF-8
UTF-16 (Java)
UTF-32

문자열(String)
fixed length (고정 길이)
variable length (가변 길이)
c는 아스키 코드로 저장
java는 유니코드(UTF16, 2byte)로 저장
파이썬은 유니코드(UTF8)로 저장
자기 문자열에서 뒤집는 방법
새로운 빈 문자열을 만들어 소스 뒤 부터 읽어서 타겟에 쓰는법
StringBuffer의 reverse() 메소드 쓰면 되긴하는데 StringBuilder나
Java에서는 equals() 메소드 제공
숫자 클래스의 parse 메소드
int atoi(char[] charArr) {
int value = 0;
int digit;
for(int i=0; i<charArr.length; i++) {
if(charArr[i] >= '0' && charArr[i] <= '9')
digit = charArr[i] - '0';
else
break;
value = (value * 10) + digit;
}
return value;
}
고지식한 패턴 검색 알고리즘 (Brute Force)
카프-라빈 알고리즘
KMP 알고리즘
보이어-무어 알고리즘
고지식한 패턴 검색 알고리즘(브루트포스) 빼고 세 가지는 이런게 있다만 알면 된다.
public class For문을활용한브루트포스 {
public static void main(String[] args) {
char[] original = "My name is Se Yun".toCharArray();
char[] part = "Yun".toCharArray();
int idx = BruteForceFor(original, part);
System.out.println(idx);
}
public static int BruteForceFor(char[] original, char[] part) {
// pattern이 한 칸씩 shift하는데 그걸 최대 n-m+1번 수행 여기선 17 - 3 + 1 = 15
for(int i=0; i<original.length - part.length + 1; i++) {
boolean flag = true;
for(int j=0; j<part.length; j++) {
if(original[j+i] != part[j]) {
flag = false;
break;
}
}
if(flag)
return i;
}
return -1;
}
}
public class While문을활용한브루트포스 {
public static void main(String[] args) {
char[] original = "I am 26 years old".toCharArray();
char[] part = "26".toCharArray();
int idx = BruteForceWhile(original, part);
System.out.println(idx);
}
public static int BruteForceWhile(char[] original, char[] part) {
int i = 0;
int j = 0;
while(i < original.length && j < part.length) {
if(original[i] != part[j]) {
i -= j;
j -= 1;
}
i++;
j++;
}
if(j == part.length)
return i - j;
else
return -1;
}
}