코딩테스트 96

[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

[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

[leetcode] 739. Daily Temperatures

문제 최초 풀이 -> 2중 for문, 배열의 크기가 최대 10^5라 분명 시간 제한으로 풀리지 않을 것을 알고 있었음..최종 풀이 -> stack을 이용해서 풀이, 스택에는 배열의 인덱스를 삽입하고 배열 for문을 돌리면서 stack에 값이 들어있거나 temperatures[스택 peek]  최초 풀이class Solution { public int[] dailyTemperatures(int[] temperatures) { int max = 0; int size = temperatures.length; int[] cnt = new int[size]; for(int i = 0; i  최종 풀이class Solution { public int[] ..

코딩테스트 2024.06.06

[leetcode] 605. Can Place Flowers

문제 특정 인덱스의 이웃값이 비어있는지 체크한 후 비어있으면꽃을 심고 그렇지 않을 경우 넘어가며 주어진 n만큼 꽃을 심을 수 있는지 판단하는 문제  풀이 -> 크기가 2 * 10^4 정도의 작은 배열이었기 때문에 주어진 flowerbed보다 크기가 2 큰 새로운 배열 custom을 선언해서맨 앞과 맨 끝에 0을 각각 넣고 인덱스 1부터 flowerbed_size + 1에 배열 flowerbed를 복사했다.그 후 1부터 flowerbed_size까지 체크하며 꽃을 심을 땅을 셌다. class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int count = 0; int size = flowerbed...

코딩테스트 2024.06.06