반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- c#
- 2019 kakao
- unrealengine
- 백준
- 2018 kakao
- Summer/Winter Coding
- netmode
- 최대값과 최솟값
- pccp 기출문제
- pcce 기출문제
- gameinstancesubsystem
- Unreal Engine
- 2022 kakao
- fruitspuzzle
- 프로젝트
- Algorithm
- issac3d
- timelessadventure
- fabrik ik
- C++
- 코딩테스트
- unity
- ai controller
- 구현
- 리플렉션 시스템
- 로컬 네트워크 연결
- enetrole
- 프로그래머스
- network model
- 당구 연습
Archives
- Today
- Total
LeeTaes 공부노트
[프로그래머스/C++ 문제 풀이] Lv. 0 - 배열 조각하기 본문
728x90
반응형
문제 설명
정수 배열 arr와 query가 주어집니다.
query를 순회하면서 다음 작업을 반복합니다.
- 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
- 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
제한 사항
- 5 ≤ arr의 길이 ≤ 100,000
- 0 ≤ arr의 원소 ≤ 100
- 1 ≤ query의 길이 < min(50, arr의 길이 / 2)
- query의 각 원소는 0보다 크거나 같고 남아있는 arr의 길이 보다 작습니다.
입출력 예
arr | query | result |
[0, 1, 2, 3, 4, 5] | [4, 1, 2] | [1, 2, 3] |
입출력 예 #1
- 이번에 매번 처리할 query의 값과 처리 전후의 arr의 상태를 표로 나타내면 다음과 같습니다.
query의 값 | query 처리 전 | query 처리 후 | 비고 |
1 | [0, 1, 2, 3, 4] | [1, 2, 3, 4] | 1번 인덱스의 쿼리이므로 앞부분을 자른다. |
2 | [1, 2, 3, 4] | [1, 2, 3] | 2번 인덱스의 쿼리이므로 뒷부분을 자른다. |
4 | [0, 1, 2, 3, 4, 5] | [0, 1, 2, 3, 4] | 0번 인덱스의 쿼리이므로 뒷부분을 자른다. |
- 따라서 [1, 2, 3]을 return 합니다.
문제 풀이
저는 이번 문제에 처음 접근했을 때 주어진 query의 값(인덱스)에 따라 원본 배열(arr)의 요소를 삭제(erase)하는 것에 집중하였고, 실패 결과를 얻게 되었습니다.
이후 해당 코드를 수정하기 위해 생각해보니 지속적으로 erase()함수를 동작시키는 것보다, 원본 배열(arr)의 시작과 끝 인덱스를 관리하여 해당 부분만 결과로 넘겨주는 것이 효율적이라는 생각이 들었으며, 해당 방법으로 문제를 해결하게 되었습니다.
> 시작 인덱스, 종료 인덱스 선언
int startIndex = 0;
int endIndex = arr.size();
> 인덱스에 따른 처리
if (i % 2 == 0)
endIndex = startIndex + query[i];
else
startIndex += query[i];
정답 코드
더보기
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr, vector<int> query) {
vector<int> answer;
int startIndex = 0;
int endIndex = arr.size();
for (int i = 0; i < query.size(); i++)
{
if (i % 2 == 0)
{
endIndex = startIndex + query[i];
}
else
{
startIndex += query[i];
}
}
for (int i = startIndex; i <= endIndex; i++)
{
answer.push_back(arr[i]);
}
return answer;
}
728x90
반응형
'코딩테스트 > 프로그래머스 (Lv. 0)' 카테고리의 다른 글
[프로그래머스/C++ 문제 풀이] Lv. 0 - 배열 만들기 2 (0) | 2024.07.01 |
---|---|
[프로그래머스/C++ 문제 풀이] Lv. 0 - 코드 처리하기 (0) | 2024.07.01 |
[프로그래머스/C++ 문제 풀이] Lv. 0 - 최빈값 구하기 (0) | 2024.06.29 |
[프로그래머스/C++ 문제 풀이] Lv. 0 - OX퀴즈 (0) | 2024.06.29 |
[프로그래머스/C++ 문제 풀이] Lv. 0 - 다음에 올 숫자 (0) | 2024.06.25 |