본문 바로가기
728x90
반응형

전체 글188

빠른 문자열 복사 C언어로 문자열 복사 및 붙여넣기시, 다른 언어들과 다르게 +=을 사용할 수 없습니다. 이런 경우 C언어를 배우게 되면서 학습한 strcpy나 strcat을 활용하시면 됩니다. 그러나, strcat이나 strcpy를 활용해서 다량을 문자열들을 복사나 붙여넣기 하게되면 시간이 오래 소요되게 됩니다.오늘은 strcat이나 strcpy가 아닌 다른 방식으로 같은 효과를 보면서 시간이 더 빠른 방법에 대해 알아보고자 합니다. strcat을 보시면 strcpy를 활용하는 것을 볼 수 있습니다.그러면 이런 생각을 하게 되죠.'strcat을 하지말고 그냥 strcpy를 사용하면 되지 않아?'맞습니다. strcat대신에 strcpy를 활용하게 된다면 아마 조금의 속도향상은 있을 겁니다.그러나, 아직까지 속도가 느리다고.. 2024. 4. 29.
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.
728x90
반응형