전체 글 151

[leetcode] 443. String Compression

문제 최초 풀이 -> 각 알파벳, 알파벳 개수 정보를 하나의 문자열에 모은 후 char[]에 다시 할당참고 풀이 - > 링크알파벳 개수를 groupLength으로 파악한 후 곧바로 char[]에 할당, 이게 끝날때까지 반복최초 풀이(2ms)class Solution { public int compress(char[] chars) { StringBuilder sb = new StringBuilder(); int cnt = 1; // 어떤 알파벳이 몇 개 있는지 sb에 구한다. for(int i = 1; i 1) { sb.append(cnt); } brea..

코딩테스트 2024.06.11

메시지 큐

메시지 큐는 시스템 간의 결합도를 낮출 수 있는데 시스템끼리 서로의 애플리케이션에 대한 정보가 없어도 비동기적으로 데이터를 교환할 수 있기 때문이다.따라서 시스템을 분리하는데 유리하고 확장성, 신뢰성을 높일 수 있기 때문에 분산 시스템 환경에서 메시지 큐를 사용하는 일이 많다. 메시지 큐의 종류에는 RabbitMQ, Kafka, Redis Sub/Pub 이 있는데 분산 시스템 환경, 애플리케이션의 종류, 데이터에 따라 선택하는 것이 좋다. RabbitMQ는 AMQP(Advanced Message Queue Protocol)로써 다양한 데이터 패턴, 여러 라우팅이 가능해야할 때 사용해야 한다.Kafka는 LinkedIn에서 제공하며 대규모 데이터 처리 시에 유용하게 사용된다. 이벤트 처리, 대규모 데이터 ..

카테고리 없음 2024.06.10

배열 & 리스트 & ArrayList, LinkedList

배열과 리스트는 아주 잘 사용되는 자료 구조 중 하나로 데이터의 집합을 저장하기 위한 구조이다. 배열배열은 메모리 상에 연속적인 공간에 저장되며 최초로 할당받은 저장공간을 사용한다.동일한 타입의 데이터를 연속적인 공간에 저장하기 때문에 인덱스를 이용해서 데이터가 저장된 공간으로 빠르게 이동할 수 있다.메모리 상에 연속적인 공간에 할당되어 있기 때문에 배열의 크기를 변경하는 것은 불가능하다.따라서 배열의 크기를 변경하고 싶을 때는 아예 크기가 큰 새로운 배열을 선언해야 한다. 크기가 큰 배열을 선언하고 싶을 때 메모리에 충분한 공간이 없다면 메모리 할당에 제약이 발생한다.  즉, 배열은 메모리 상 연속적인 공간에 저장되며 인덱스를 통한 접근이 가능하기 때문에 빠르게 접근 가능하며 간단하게 구현할 수 있다는..

카테고리 없음 2024.06.09

[leetcode] 724. Find Pivot Index

문제 최초 풀이(5ms)class Solution { public int pivotIndex(int[] nums) { int result = -1; int sum = Arrays.stream(nums).sum(); int presum = 0; for(int i = 0; i   참고 후 최종 풀이(1ms) 스트림을 사용하면 코드가 간결해지고, 가독성이 높아지는 건 맞는데 ms 단위로 시간을 줄이고자 할 때는 적절하지 않은 듯.. presum * 2 가 전체 합에서 nums[i]를 뺀 값, presum += nums[i++]로 반복 표현하기 등을 배움..세상 똑똑이들 참 많다 많어..class Solution { public int pivotInd..

코딩테스트 2024.06.09

[leetcode] 238. Product of Array Except self

문제 product는 '곱'이라는 뜻이다.즉, 문제는 자신을 제외한 배열의 곱을 구하라는 뜻이다.조건은 시간 복잡도는 O(n)이면서 나눗셈을 사용하지 말고 구현하라고 하였다. 조건에 맞게 풀기1. time O(n), space O(2n)2. timeO(n), space O(1) 인덱스 i의 product array except self을 구하면nums[0] * nums[1] * .... * nums[i -1]      *      nums[i + 1] * nums[i + 2] * .... * nums[n - 1] 앞 부분과 뒷 부분으로 나누어 메모를 한 후 필요한 값을 꺼내 쓸 수 있다.각각 앞, 뒤로 1을 추가해서 곱셈 진행할 수 있도록 한다. 참고 사이트 알고달레알고리즘 입문자를 위한 달레의 친절한 ..

코딩테스트 2024.06.09

[leetcode] 151. Reverse Words in String

문제 최초 풀이(17ms) -> trim, replaceAll(정규식) 사용해서 문자열 앞뒤, 다중 공백 제거최종 풀이(6ms) -> trim, replaceAll(정규식) 후 문자열 reverse, while문으로 문자열을 훑으면서 공백이 있을 경우 two pointer로 reverse 해준다. solution 풀이 참고해서 품(코드 참고 x) 최초 풀이class Solution { public String reverseWords(String s) { // remove leading, trailing spaces & reduce multiple spaces s = s.trim().replaceAll(" +", " "); int start = 0;..

코딩테스트 2024.06.07

[leetcode] 345. Reverse Vowels

문제 최초 풀이 (시간 복잡도 O(n))1. stack을 이용해서 문자열 s의 for문을 돌며 vowel을 따로 저장2. 문자열 s의 for문을 돌며 문자열 s의 vowel 부분에 stack의 pop으로 하나씩 꺼내서 문자열을 완성함. 최종 풀이 -> two pointer 사용, start = 0, end = s.length() - 1 부터 시작해서 각각이 모음을 발견하면 swap할 수 있도록 함.(참고한 풀이에서 시간 복잡도가 O(n)이라고 했는데 좀 생각해봐야할 부분)최초 풀이class Solution { public String reverseVowels(String s) { List vowels = new ArrayList(); vowels.add('a'); ..

코딩테스트 2024.06.07