본문 바로가기

CSE

(15)
[Automata Theory] Language 언어(Language)라는 개념은 우리에게도 굉장히 친숙한 개념이다. 늘 사용하는 것이 언어이고 이 글도 언어의 한 종류인 한국어와 영어로 쓰여진 무언가 이다. 그렇다면 언어의 정의는 무엇일까? 우선, 언어를 정의하기 위해서는 '알파벳'과 '스트링'이라는 것이 필요하기에 이들을 먼저 알아보자. 1. 알파벳 $\Sigma$는 문자들의 Finite Set이다. 예를 들어, 영어의 경우 $\Sigma=\{a, b,\cdots,z\}$이고, 이진수의 경우 $\Sigma=\{0,1\}$이다. 2. 스트링은 알파벳 $\Sigma$에 속해있는 문자들의 유한한 나열이다. 예를 들어, "abcd"는 $\Sigma=\{a, b,\cdots,z\}$상의 스트링이다. 3. $\Sigma$상의 모든 스트링의 집합은 $\Sigm..
[Automata Theory] Introduction What is Automata? 오토마타는 그리스어 'αὐτόματα'에서 유래한 말로 한국어로 번역하면 "자동 기계"라는 뜻을 가지고 있다. 정확히는 오토마타는 복수형이고, 단수형은 오토마톤(Automaton)이다. 이 자동 기계는 상태를 가지고 있고, 입력을 받을 수 있고, 특정 규칙에 따라 작동하며 메모리를 가질 수도 있다. 무언가 현재의 컴퓨터와 유사한 부분이 많다는 생각이 들지 않는가? 정확하다. 오토마타는 이론적으로 추상화된 컴퓨터라고 할 수 있다. (사실 컴퓨터가 오토마타 이론에서부터 출발한 것이므로 오토마타를 구현한 것이 컴퓨터라고 해야 맞다.) Why Automata Theory? 오토마타 이론(Automata Theory)은 말 그대로 오토마타와 그로부터 유도되는 문제 등을 연구하는 학..
Regex Quantifier 사용시 주의할 점 보통 문자열이나 HTML 코드 등을 파싱 할 때 Regex(Regular Expression, 정규표현식)를 많이 사용한다. Regex를 이용하면 모든 문자열을 효율적으로 표현할 수 있기에 잘 다루면 큰 도움이 된다. 이런 Regex에는 Quantifier라는 수를 표현할 수 있는 문법이 있는데, 주로 다음을 일컫는다. ? : 0번 또는 1번 * : 0번 이상 + : 1번 이상 {N,} : N번 이상 {N,M} : N번 이상 M번 이하 예를 들어, a+은 a가 1번 이상 반복되는 'a', 'aa', 'aaa' 등을 말한다. 이때 주의해야 할 Quantifier는 제일 마지막에 있는 {N,M}이다. 바로 띄어쓰기를 조심해야 하는데, {N, M}과 {N,M}은 엄연히 다른 것으로 후자가 Quantifier의..
새로고침이 안된다면? 웹 개발을 할 때 분명 코드를 바꿨고 새로고침도 했는데도 반영이 안 될 때가 있다. 그럴 때는 우선 컴파일이 잘 되었는지, 코드를 저장했는지 먼저 확인해보자. 그런데도 반영이 안 된다면 Ctrl+Shift+R을 눌러보자. 해결이 될 것이다.
BOJ 19585. 전설 문제링크 이 문제는 solved.ac Class 6++을 따기 위해 푼 문제였는데, 상당히 나를 귀찮게 했다. 그리고 맞고도 무언가 찝찝해 나와 같은 어려움을 겪고 있는 분들께 도움이 되고자 풀이를 작성해본다. Problem 더보기 $C(1\leq C \leq 4000)$개의 색깔을 나타내는 문자열과 $N(1\leq N \leq 4000)$개의 닉네임을 나타내는 문자열이 주어져있다. 이때 $Q(1 \leq Q \leq 20000)$개의 문자열에 대해 해당 문자열이 색깔 문자열 + 닉네임 문자열 꼴인지 판별하는 문제이다. 색깔, 닉네임 문자열의 길이 : 1000 이하, 판별 문자열의 길이: 2000 이하 Discussion 문제를 읽고 처음 든 생각은 "참 제한이 애매하다"였다. 제한시간이 3초이긴 하지만..
Python Decorator Python 뿐만 아니라 Java, Kotlin 등 많은 언어에서 "@..."와 같은 코드를 볼 수 있다. 이를 Python에서는 Decorator, Java에서는 Annotation이라고 하는데, 이는 특정 함수에 붙어 함수에 특별한 능력을 부여해주는 역할을 한다. 예외 처리를 도맡아 하거나 특정 기능을 수행할 수도 있다. 이런 문법은 주로 개발에서 많이 쓰이는데, 나도 자주 쓰다가 정확하게 어떻게 동작하는지는 최근에서야 알게 되었다. 이 문법을 자주 쓴다면 꼭 알아보자! 이에 대한 자세한 설명은 여기를 참조하자.
SEERC 2019 C. Find the Array 문제 링크 (BOJ 17957) 위 문제는 정말 나를 멘붕에 빠뜨린 문제였다. ICPC 팀 연습에서 만났던 문제이고, 1시간 반 넘게 고민했지만 감도 못 잡고 풀지도 못했다. 연습이 끝나고 읽은 풀이가 정말 놀라워 정리해보았다. Problem 더보기 이 문제는 Interactive 문제이다. $N(1\leq N \leq 250)$개의 서로 다른 수로 이루어진 배열 $A$가 있다. 최종적으로 우리는 이 배열을 알아내야 한다. 그러기 위해 2가지 쿼리를 날릴 수 있다. 인덱스 $i$를 골라 $A[i]$를 얻는다. 인덱스 $k$개 $i_1, \cdots i_k$에 대해 $\binom{k}{2}$개의 $|A[i_l]-A[i_m]|$들을 얻는다. 두 종류를 합쳐 총 30개 이하로 쿼리를 날려야 한다. Discus..