같은 숫자는 싫어

문자


나의 생각

해당 문제는 부트캠프에서 stack을 이용하여 풀라고 한 내용으로 최대한 stack을 사용하여 풀어 본 문제이다. 

while - for 문을 이용한 풀이로 start 정수형 타입을 하나를 두고 (start + 1) ~ arr.size() 까지 가면서 같은 값이 없을 때 stack에 psuh() 하는 방식으로 접근.

length(), legnth()-1 값이 같은 경우 무한로직이 돌아서 해당 경우의 수만 따로 처리하는 if 문 추가.


나의 답안

public static int[] solution(int[] arr) {
    Stack stack = new Stack();

    int start = 0;

    while(start < arr.length){
        for (int i = start; i < arr.length; i++) {
            if (arr[start] != arr[i]) {
                stack.push(arr[start]);
                start = i;
                break;
            } else if ( i == arr.length-1) {
                stack.push(arr[start]);
                start = arr.length;
                break;
            }
        }
    }

    int[] answer = new int[stack.size()];
    for (int i = 0; i < stack.size(); i++) {
        answer[i] = (int)stack.get(i);
    }

    return answer;
}

다른 답안

주어진 조건을 보고 잘 푼 문제로 보이는 답안다. 1~9 까지의 숫자를 준다고 하면 그 외 나머지 수는 무조건 다르다. 

그리고 그 기준값으로 반복문을 돌면서 다르다면 그 값을  list에 추가 -> 기준 정수형을 다시 해당 값으로 초기화

특히나 해당 방법은 시간복잡도 부분에서 매우 효율적인 코드로 해당 코드를 잘 기억을 하고 있어야 겠다.  

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        ArrayList<Integer> tempList = new ArrayList<Integer>();
        int preNum = 10;
        for(int num : arr) {
            if(preNum != num)
                tempList.add(num);
            preNum = num;
        }       
        int[] answer = new int[tempList.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = tempList.get(i).intValue();
        }
        return answer;
    }
}

'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글

나누어 떨어지는 숫자 배열  (0) 2023.03.14
서울에서 김서방 찾기  (0) 2023.03.14
두 정수 사이의 합  (0) 2023.03.13
정수 내림차순으로 배치하기  (0) 2023.03.13
문자열 내 p와 y의 개수  (0) 2023.03.12