Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

David의 블로그

프로그래머스 - 빈 배열에 추가, 삭제하기 본문

프로그래밍/코딩

프로그래머스 - 빈 배열에 추가, 삭제하기

David 리 2024. 6. 4. 20:41

문제 설명>

아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고,

flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요

 

내 생각>

boolean flag[]와 int arr[] 배열들의 길이는 같고, flag[]를 순회하여 arr[]를 가공해야 하니 인덱스는 신경 안 써도 됐다.

true라면 arr[i] * 2돌리면서 증감연산자(+)로 새로운 배열에 넣고, false라면 배열의 끝 인덱스를 구해 증감연산사(-)로 돌렸다.

첫 번째 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        List<Integer> intList = new ArrayList<Integer>();
        int loopCnt = 0;
        int removeCnt = 0;
        
        for (int i = 0; i < flag.length; i++) {
            // true일 때
            if (flag[i]) 
            {
                loopCnt = arr[i] * 2;
                for (int j = 0; j < loopCnt; j++) {
                    intList.add(arr[i]);
                }
            } 
            // false일 때
            else 
            {
                // intList에 값이 존재하면,
                if (!intList.isEmpty())
                {
                    int removeStrat = intList.size() - 1;
                    for (int j = removeStrat; j > removeStrat - arr[i]; j--) {
                        intList.remove(j);
                    }
                }
            }
        }
        answer = intList.stream().mapToInt(i -> i).toArray();
cs

 

 

두 번째 풀이>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 for (int i = 0; i < flag.length; i++) {
            if (flag[i])
            {
                for (int j = 0; j < arr[i] * 2; j++) {
                    intList.add(arr[i]);
                }
            }
            else
            {
                for (int j = 0; j < arr[i]; j++) {
                    intList.remove(intList.size() - 1);
                }
            }
        }
        
        answer = intList.stream().mapToInt(i -> i).toArray();
cs

 

바뀐점은 유효성 체크가 없어졌고, flag[i] false부분에서 for문에 loop관련 연산자가 ++로 바뀌었다는 점과

arr[i]로 바뀌었다는 점이다.