Day 19 문자열, 리스트(배열)

Day19 19단계 20231108

1. 세 개의 구분자

import java.util.*;
class Solution {
    public String[] solution(String myStr) {
		String[] answer = {};
        myStr = myStr.replaceAll("[a-c]", " ");
		if (myStr.isBlank()) {
            return new String[] {"EMPTY"};
		} else {
			answer = myStr.strip().split("\\s+");
		}
        return answer;
    }
}

Day 19 기초 1번 결과 1.png

String[] answer = {};
StringTokenizer st = new StringTokenizer(myStr, "abc");
if(st.countTokens() != 0) {
	answer = new String[st.countTokens()];
	for (int i = 0; i < answer.length; i++) {
		answer[i] = st.nextToken();
	}
} else {
	return new String[] {"EMPTY"};
}
return answer;

Day 19 기초 1번 결과3.png


2. 배열의 원소만큼 추가하기

import java.util.*;
class Solution {
    public int[] solution(int[] arr) {
		List<Integer> list = new ArrayList<>();
		for (int i : arr) {
			for (int j = 0; j < i; j++) {
				list.add(i);
			}
		}
        return list.stream().mapToInt(x->x).toArray();
    }
}
return Arrays.stream(arr).boxed()
						.flatMap(num -> Collections.nCopies(num, num).stream())
						.mapToInt(x->x)
						.toArray();

3. 빈 배열에 추가, 삭제하기

  • 내 풀이 : Stack을 사용해서 조건별로 요소를 추가하고 삭제했다.
  • flag[i] = true라면 arr[i]를 arr[i] * 2번 stack.push(arr[i]) 진행
  • flag[i] = false라면 arr[i]를 arr[i]번 stack.pop 진행
  • List 인터페이스#Stack 인스턴스이름 = new Stack ();
    import java.util.*;
    class Solution {
        public int[] solution(int[] arr, boolean[] flag) {
            Stack<Integer> stack = new Stack<>();
            for (int i = 0; i < arr.length; i++) {
                if(flag[i]) {
                    for (int j = 0; j < arr[i]*2; j++) {
                        stack.push(arr[i]);
                    }
                } else {
                     for (int j = 0; j < arr[i]; j++) {
                        stack.pop();
                    }
                }
            }
    
            return stack.stream().mapToInt(x->x).toArray();
        }
    }
    

    4. 배열 만들기 6

    import java.util.*;
    class Solution {
        public int[] solution(int[] arr) {
    		List<Integer> list = new ArrayList<>();
    		for (int i = 0; i < arr.length; i++) {
    			if(list.isEmpty()) {
    				list.add(arr[i]);
    			} else if (list.get(list.size()-1) == arr[i]) {
    				list.remove(list.size()-1);
    			} else {
    				list.add(arr[i]);
    			}
    		}
            if (list.isEmpty()) return new int[] {-1};
            return list.stream().mapToInt(x->x).toArray();
        }
    }
    

    5. 무작위로 K개의 수 뽑기

    import java.util.*;
    class Solution {
        public int[] solution(int[] arr, int k) {
            List<Integer> list = new ArrayList<>();
            for (int i : arr) {
                if (!list.contains(i) && list.size() < k) {
                    list.add(i);
                }
            }
            while(list.size() < k) {
                list.add(-1);
            }
            return list.stream().mapToInt(x->x).toArray();
        }
    }
    
    return IntStream.concat(Arrays.stream(arr).distinct(),
    					   IntStream.range(0, k).map(i -> -1))
    				.limit(k)
    				.toArray();