문자
나의 생각
해당 문제는 부트캠프에서 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 |