방명록
- [프로그래머스 / 자바] 빈 배열에 추가, 삭제하기2023년 11월 22일 09시 45분 57초에 업로드 된 글입니다.작성자: 민발자728x90
문제
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.
풀이
import java.util.*; class Solution { public int[] solution(int[] arr, boolean[] flag) { int idx = 0; List<Integer> array = new ArrayList<>(); for(boolean f : flag){ if(f) { for (int i = 0; i < arr[idx]*2; i++) { array.add(arr[idx]); } } else { for (int i = 0; i < arr[idx]; i++) { array.remove(array.size()-1); } } idx++; } int[] answer = new int[array.size()]; for(int i = 0; i < array.size(); i++){ answer[i] = array.get(i); } return answer; } }
flag가 true면 arr[i]를 단순히 *2번 추가하는 문제로 해석해서 헛짓 좀 했다🥹
false인 경우 arr[i]번 만큼 원소를 삭제해야 하기 때문에 else 넣어줌
import java.util.*; class Solution { public int[] solution(int[] arr, boolean[] flag) { ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < arr.length; i++) { if (flag[i]) { for (int j = 0; j < arr[i] * 2; j++) { list.add(arr[i]); } } else { for (int j = 0; j < arr[i]; j++) { list.remove(list.size()- 1); } } } int[] answer = new int[list.size()]; for (int i = 0; i < list.size(); i++) { answer[i] = list.get(i); } return answer; } }
나는 flag를 하나씩 가져와서 arr를 다루기 위한 idx 변수가 따로 필요했는데 이것도 그냥 단순 for문으로 가져오면 속도도 빠르고 메모리도 덜 쓴다
참고할만한 다른 사람 풀이
import java.util.*; class Solution { public int[] solution(int[] arr, boolean[] flag) { Stack<Integer> stack = new Stack<>(); for (int i = 0; i < flag.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(Integer::intValue).toArray(); } }
리스트 대신 스택으로 푸는 방법
728x90'기록 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 코딩테스트 기초 트레이닝 문제 완료 (0) 2023.11.24 [프로그래머스 / 자바] 정수 제곱근 판별 (0) 2023.11.24 [프로그래머스 / 자바] 공백으로 구분하기 2 (0) 2023.11.22 [프로그래머스 / 자바] 정사각형으로 만들기 (0) 2023.11.22 [프로그래머스 / 자바] 배열만들기 1 (0) 2023.11.16 다음글이 없습니다.이전글이 없습니다.댓글