본문 바로가기
728x90
반응형

전체 글187

Efficient String Matching : An Aid to Bibliographic Search 리뷰 이번엔 Efficient String Matching : An Aid to Bibliographic Search이라는 논문에 대해 리뷰해볼까 합니다. 해당 논문은 유명한 문자열 매칭 알고리즘인 "아호코라식"에 대한 논문입니다. 아호 코라식 알고리즘에 대해 이해하기에 앞서 kmp와 trie 알고리즘에 대해 어느 정도 알고계시면 이해하기 쉽습니다. KMP "ABAABC"라는 문자열에 "ABC"라는 단어가 부분 문자열로 존재하는지 체크하는 과정을 단순 반복문을 통하여 진행하게 되면, 맨 앞에 단어부터 해당 형식으로 진행하게 됩니다. kmp 알고리즘을 활용하게 된다면, 해당 형식처럼 진행을 하게 됩니다. kmp는 기존 문자열 매칭방식과 다르게 fail function이라는 실패 함수를 활용하게 됩니다. "ABC.. 2024. 4. 23.
C의 문자열 복사 java나 C++같은 경우 문자열 복사를 수행할 때 += 이라는 연산자를 활용하여 가능합니다. 그러나 C언어의 경우 문자열 복사를 수행할 때 += 연산자를 사용할 수 없습니다. 또한 입력하고자 하는 문자열의 길이를 알지 못하면 해당 값을 저장할 수 없습니다. java의 경우 String s = ""; String c1 = "1"; s += c1; System.out.print(s); 이런식으로 가능하지만, C의 경우 char *c1 = "1"; char ch[strlen(c1) + 1]; strcpy(ch, c1); printf("%s", ch); 이런식으로, 저장할 문자열의 길이를 저장한 이후, strcpy를 통해 값을 복사합니다. 이후에 다른 문자열을 추가할 경우에는 strcat을 통하여 값을 추가할.. 2024. 4. 21.
문자열 다루기 자바를 활용해서 코드를 작성하다보면 여러번 값을 출력해야 하는 경우가 발생합니다. 이럴 경우 여러번 모두 해당 형식처럼 작성하게 됩니다. for(int i = 0; i < n; i++){ System.out.print(i + " "); } 이럴 경우, 많은 시간을 출력하는데 소요되게 됩니다. 여러번 출력해야 하는 경우 보통 StringBuilder를 선언하여 사용합니다. StringBuilder sb = new StringBuilder(); for(int i = 0; i < n; i++){ sb.append(i).append(" "); } System.out.print(sb); 해당 형식으로 출력하게 되면, 마지막에 공백이 포함되게 됩니다. 그런 경우 .trim()으로도 처리가 가능하지만, 더 좋은 방법.. 2024. 4. 14.
객체 비교 자바에는 다양한 비교 라이브러리들이 존재합니다. 그 중, 객체(문자열) 비교 함수로 equals를 주로 사용합니다. 그러면서 만나는 불편한점 해소 및 잘못사용하고 있었던 방식에 대해 이야기해보고자 합니다. 불편한 점 문자열 비교를 위하여 equals를 사용하다보면, 대문자와 소문자 구별을 못하는 경우가 발생합니다. String s = "abc"; System.out.print(s.equals("ABC")); false String s = "ABC"; System.out.print(s.equals("abc")); false 이럴 경우 보통 저희는 이런식으로 대처합니다. 소문자로 비교하면 비교 대상을 소문자로, 대문자로 비교하면 비교 대상을 대문자로 변경 후 비교하게 됩니다. String s = "ABC";.. 2024. 4. 2.
[백준] 18185번 : 라면 사기 https://www.acmicpc.net/problem/18185 18185번: 라면 사기 (Small) 라면매니아 교준이네 집 주변에는 N개의 라면 공장이 있다. 각 공장은 1번부터 N번까지 차례대로 번호가 부여되어 있다. 교준이는 i번 공장에서 정확하게 Ai개의 라면을 구매하고자 한다(1 ≤ i www.acmicpc.net 효율적으로 라면을 사는 방법을 구하는 문제입니다. 3 1 0 1 으로 들어 오게 될 경우 1,3번에서 3의 cost로 라면을 살 수 밖에 없어 6이 되게 됩니다. 5 1 1 1 0 2 으로 들어오게 될 경우 1,2,3에서 7의 cost로 살 수 있고, 5에서 3의 cost로 2번 살 수 있어 총 13의 cost를 사용하여 라면을 살 수 있습니다. 해당 입력만 보고 풀게 된다면 소.. 2024. 3. 21.
Map<String, List<String>> 관련 clear() 자바에서 특정 key에 대한 value로 list를 지정하여 해당 key에 대하여 값들을 모아두는 형태로 코드를 작성하는 경우가 있습니다. Map map = new HashMap(); 이런 경우 GC가 발생하게 된다면 어떻게 될까요? 값들을 저장해서 계속 사용한다면 괜찮겠지만, 이렇게 만들어두고 값을 전달한 후, 더이상 사용하지 않는 경우에서 gc가 발생할 경우? 이런 형태로 해당 값이 사용중인지 확인하는 단계를 거치게 될 것입니다. '그치만 값 전달 후 map.clear()를 통해 map을 비워버리면? gc는 해당 map이 바로 사용하지 않는 상태라는 것을 확인하여 지우는데 오랜 시간이 걸리지 않을까?' 라는 생각을 하게 되었습니다. map.clear()를 하면 gc가 발동하기 전 실제 프로그램 속도에.. 2024. 2. 26.
[논문] Attention is all you need 이해하기 보호되어 있는 글 입니다. 2024. 2. 19.
변수 선언 후 인자 전달 vs 인자 전달 개발을 진행하던 중, 한가지 궁금점이 들었습니다. String s = "1"; print(s); print("1") 의문점 둘 중 어느게 빠를까? 둘의 메모리 사용량은 같을까? 다르다면, 어느게 메모리를 적게 사용할까? 정확하게 분석이 불가능하여 시간 측정 및 메모리 측정을 하였습니다. 1. String s; for (int i = 0; i < 1000000000; i++) { s = "1"; print(s); } 2. for(int i = 0; i < 1000000000; i++){ print("1"); } 해당 코드들로 시간 측정을 하였고, 함수는 System.currentTimeMillis() 을 사용하였습니다. 결과 1. 시간차이(ms) : 5 2. 시간차이(ms) : 4 미세하게 변수를 선언하지.. 2024. 2. 14.
2023년 회고 / 2024년 목표 2023년을 돌아보면서, 다가올 2024년의 목표를 정리해보기 위해 적어보았다. 2023년 회고 1. 취업을 했다. 2023년 5월 검색 관련 개발직을 맡게 되었다. 2. 알고리즘 2023년 1월 1일 기준 2455 solve에서 3375solve 1년동안 920문제 대략 하루에 평균 2.52문제를 풀은 셈이다. 백준을 통해 운영진으로서 좋아하는 게임의 IP를 활용한 대회를 개최해 보았다. (https://lms0806.tistory.com/184) solved 티어 2020년은 실버1, 2021년은 플레5, 2022년도 플레5, 2023년은 플레4로 마무리하였다. 문자열은 JAVA, 나머지는 CPP를 활용해서 문제를 풀면서 CPP 활용능력을 키우고 있다. 3. 개발 메이플스토리 월드를 통해 게임을 개발.. 2024. 1. 17.
728x90
반응형