문자열 - 아호 코라식(Aho-Corasick)
아호 코라식(Aho-Corasick)에 대해 알아보자.
rust 공부시작!
C, C++, python을 할줄 알지만 뭔가 다른 사람들과의 차별점을 두고 싶어서 하나만 더 배워보고 싶었다. rust는 백준 사이트에서 보면 굉장히 빠르다. 또한 보안에도 좋다고 들었다. 그런것도 있지만 희소성도 있는 것 같아서 공부를 해보려고 한다. 여기서는 출력, 입력, 자료형 등 기본적인 문법을 정리해보겠다. 공부할 때, tour of rust 를 많이 참고했다.
“Hello world”를 출력하는 것은 언제나 기본이다.
fn main() {
println!("Hello, world!");
}
C와 비슷하게 main함수 안에 있고 ;(세미콜론)으로 문장을 마무리하는 것을 알 수 있다. 그리고 특이한것은 println!, 맨뒤에 !가 붙는다는 것이다. 또한 문자열은 ““로 감쌀 수 있어보인다.
fn main() {
let x = 13;
println!("{}", x);
// 자료형을 지정 float64
let x: f64 = 3.14159;
println!("{}", x);
let mut a = 34;
a = 10;
println!("{}", a)
}
변수는 let을 이용해 선언한다.
fn main() {
let a = 1; // default : i32
let b: i64 = 12345678910;
let c: u32 = 19;
let d = 5.1; //default : f64
let e = 5.1f32; // 이런식으로 뒤에 붙여도 됨
let f = true; //default : bool
let tup = (123, true); // tuple : 다른 자료형도 ok
let sen = "HI deer"; // default :str
}
기본적으로 다른 언어들과 다를게 없다.
fn main() {
let a = 1; // default : i32
let c: u32 = 19;
println!("{}", a as u32 + c);
}
as라는 예약어를 사용하여 쉽게 자료형을 변경할 수 있다.
const PI: f32 = 3.14159;
특징은 상수는 무조건 자료형을 명시해야한다는 것이다.
fn main() {
let nums: [i32; 3] = [1, 2, 3];
println!("{:?}", nums);
println!("{}", nums[1]);
}
배열의 선언방식이 꽤나 신선하다. nums : (자료형) 에서 자료형 자리에 배열 표시를 해주는 것이다. [배열 요소의 자료형; 배열의 크기] 로 깔끔하게 선언할 수 있다.
fn main() {
let mut nums: [i32; 3];
nums = [1, 2, 3];
nums = [4, 5, 6];
println!("{:?}", nums);
println!("{}", nums[1]);
}
이 또한 mutable하게 선언해서 사용할 수 있다. mut 명령어가 없다면 [1, 2 , 3] 까지는 되지만 [4, 5, 6]이 안될 것이다.
고정길이 배열이기 때문에 초기화시 맘대로 원소의 수를 줄이거나 늘리기는 힘들다.
fn add(x: i32, y: i32) -> i32 {
return x + y;
}
fn main() {
println!("{}", add(1, 2));
}
fn swap(x: i32, y: i32) -> (i32, i32) {
return (y, x);
}
fn main() {
// 리턴 값의 튜플을 리턴
let result = swap(123, 321);
println!("{} {}", result.0, result.1);
// 튜플을 두 변수명으로 분해
let (a, b) = swap(result.0, result.1);
println!("{} {}", a, b);
}
튜플의 각 원소에 접근하는 것이 간단하다. (.0, .1로 접근하고 있다.)
let (mut a, mut b) = swap(result.0, result.1);
println!("{} {}", a, b);
(a, b) = swap(a, b);
println!("{} {}", a, b);
이런식으로 편하게 swap함수를 이용해 변수에 있는 값을 뒤바꿀 수도 있다. 튜플에 mut을 적용하는 방법은 위와 같다. (하지만 mut를 남용하는 것은 좋지 않아보인다.)
c++의 void 처럼 아무것도 리턴하지 않으려면 어떻게 해야할까? 정답은 빈 튜플을 리턴하는 것이다. 이를 unit이라고 한다.
fn unit() -> () {
// 아무것도 리턴 안해도 return ()과 같은 효과
}
fn main() {
let a = unit();
println!("The value of a: {:?}", a);
}
// 결과 : The value of a : ()
출력할 내용이 없어서 디버그 문자열을 출력한다.
rust는 충분히 재밌는 것 같다. 각 언어마다 매력이 넘쳐서 새로운 언어를 배우는 것은 언제나 즐겁다. 애인을 두고 다른 사람과 만나는 것은 현실에서는 안되겠지만 프로그래밍 언어를 배울 때는 괜찮지 않을까 싶다. rust에 관심을 가진 것은 훨씬 전이지만 이번에 노마드코더 유튜브 에서도 C, C++의 메모리 누수에 대한 우려를 보였고 러스트를 추천했다. 러스트는 변수의 default가 immutable이라는 점이 재밌다. 안전에 신경을 썼다고 하니 그런 쪽 위주로 열심히 공부를 해봐야겠다.
정말 오랜만의 블로그 글이다. 블로그를 꾸미기가 넘 힘들어서 부셔버리고 새 사이트를 만들어볼까 고민중이다. 하지만 둘다 귀찮은건 매한가지다. ㅋㅋㅋ 새학기가 시작되었으니 다시 블로그를 관리해보도록 하겠다.
아호 코라식(Aho-Corasick)에 대해 알아보자.
docker를 이해해보자
2060 염소줄서기 풀이 및 코드
분할정복을 이용한 다이나믹 프로그래밍 최적화
코드포스 다시 열심히! 블로그도 열심히!
rust 공부시작!
코드포스 블루 달성 후기
여름캠프 및 SUAPC 후기
2023-05-25-Edu Codeforce round 149 (Div.2)
2023-05-13-Edu Codeforce round 148 (Div.2)
HLD(Heavy Light Decomposition)
행렬 거듭 제곱
2023-05-02-It takes two
Codeforce round 868 (Div.2)
2월 11일 문제풀이
Codeforces#846, TypeDB Foreces 2023, Codeforces#848 업솔빙
ps5 게임 : 용과같이 제로 리뷰
백준 23877번 Convoluted Intervals 문제풀이
codeforce round #828(div 3), EDU #137(div 2) 업솔빙
codeforce round #823(div 2), #824(div 2) 업솔빙
AtCoder Beginner Contest 270 업솔빙
ps5 게임 : 용과같이 극 1 리뷰
백준 18719번 Binomal 문제풀이
백준 14288번 회사문화4 문제풀이
백준 3308번 Matching 문제풀이
백준 18186번 라면사기(large) 문제풀이
백준 4196번 도미노 문제풀이
백준 3176번 도로 네트워크 문제풀이
백준 16367번 TV Show Game 문제풀이
ps5 게임 : 페르소나 5 더 로열 리뷰
codeforce round #811(div 3), #812(div 2), CodeTon round 2 업솔빙
백준 21162번 뒤집기 K 문제풀이
codeforce round #808(div 2), #803(div 2, virtual) 업솔빙
codeforce round #807(div 2) 업솔빙
백준 10167번 금광 문제풀이
codeforce round #805(div 3), #806(div 4) 업솔빙
백준 18253번 최단경로와 쿼리 문제풀이
에듀 라운드 131 업솔빙
백준 1949번 우수 마을 문제풀이
백준 3665번 최종 순위 문제풀이
Trie 자료구조 이해하기
merge sort를 이용하여 inversion 개수세기
3솔의 벽이 너무 높다..
lazy propagation없이 구간 갱신하기
코드포스 폭망기념 upsolving
백준 11505 구간 곱 구하기 문제풀이
백준 1305 광고 문제풀이
백준 4386 별자리 만들기 문제풀이
백준 4803 트리
백준 2206 벽 부수고 이동하기 문제풀이
백준 2166 다각형의 면적 문제풀이
백준 12015 가장 긴 증가하는 부분 수열2 문제풀이
백준 10986 나머지합 문제풀이
스택 구현하기 ========== 자료구조의 기본이라고 하면 스택 과 큐가 있다 백준 10828번에서 마주친 스택
매우매우 많은 정렬이 있지만 그중 가장 안 어려운 3가지를 공부해보았다.
Leave a comment