일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩 테스트
- 수학
- 프로그래머스
- todolist
- 3월
- 2024년
- 2025년
- 개인 프로젝트
- 5월
- 유니티 심화과정
- 골드메탈
- c++
- 자료 구조
- 게임 엔진 공부
- 단계별로 풀어보기
- 입문
- 4월
- 코딩 기초 트레이닝
- 개인 프로젝트 - 런앤건
- 기초
- C/C++
- 2월
- 2022년
- 다이나믹 프로그래밍
- 2023년
- 1월
- 7월
- 10월
- 백준
- 유니티
- Today
- Total
기록 보관소
[프로그래머스] 코딩 기초 트레이닝 PART 12(C++) 본문
프로그래머스 코딩 테스트 연습 : 코딩 기초 트레이닝(C++)
https://school.programmers.co.kr/learn/challenges?order=recent&languages=cpp&partIds=44139&page=3
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
프로그래머스 코딩 기초 트레이닝 : 리스트 자르기
https://school.programmers.co.kr/learn/courses/30/lessons/181897
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다.
slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.
- n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지
- n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지
- n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지
- n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로
올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
- n은 1, 2, 3, 4 중 하나입니다.
- slicer의 길이 = 3
- slicer에 담긴 정수를 차례대로 a, b, c라고 할 때
- 0 ≤ a ≤ b ≤ num_list의 길이 - 1
- 1 ≤ c ≤ 3
- 5 ≤ num_list의 길이 ≤ 30
- 0 ≤ num_list의 원소 ≤ 100
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n, vector<int> slicer, vector<int> num_list) {
vector<int> answer;
switch (n) {
case 1:
for (int i = 0; i <= slicer[1]; i++)
answer.push_back(num_list[i]);
break;
case 2:
for (int i = slicer[0]; i < num_list.size(); i++)
answer.push_back(num_list[i]);
break;
case 3:
for (int i = slicer[0]; i <= slicer[1]; i++)
answer.push_back(num_list[i]);
break;
case 4:
for (int i = slicer[0]; i <= slicer[1]; i += slicer[2])
answer.push_back(num_list[i]);
break;
}
return answer;
}
// 다른 사람의 풀이 : 벡터를 바로 만들어 return 하는 방법
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n, vector<int> slicer, vector<int> num_list) {
int a = slicer[0];
int b = slicer[1];
int c = slicer[2];
switch(n)
{
case 1: return vector<int>(num_list.begin(), num_list.begin()+b+1);
case 2: return vector<int>(num_list.begin()+a, num_list.end());
case 3: return vector<int>(num_list.begin()+a, num_list.begin()+b+1);
case 4: {
vector<int> answer;
for(int i = a; i <= b; i += c)
answer.push_back(num_list[i]);
return answer;
}
}
}
결과
프로그래머스 코딩 기초 트레이닝 : 첫 번째로 나오는 음수
https://school.programmers.co.kr/learn/courses/30/lessons/181896
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요.
음수가 없다면 -1을 return합니다.
제한사항
- 5 ≤ num_list의 길이 ≤ 100
- -10 ≤ num_list의 원소 ≤ 100
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> num_list) {
for (int i = 0; i < num_list.size(); i++)
if (num_list[i] < 0)
return i;
return -1;
}
// 다른 사람의 풀이 : iterator와 find_if를 사용하는 방법
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> num_list) {
auto it = find_if(num_list.begin(), num_list.end(), [](int num){ return num < 0; });
return (it != num_list.end()) ? distance(num_list.begin(), it) : -1;
}
결과
프로그래머스 코딩 기초 트레이닝 : 배열 만들기 3
https://school.programmers.co.kr/learn/courses/30/lessons/181895
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다.
닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 < 100
- 1 ≤ a1 ≤ b1 < arr의 길이
- 1 ≤ a2 ≤ b2 < arr의 길이
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr, vector<vector<int>> intervals) {
vector<int> answer;
for (auto interval : intervals)
answer.insert(answer.end(), arr.begin() + interval[0], arr.begin() + interval[1] + 1);
return answer;
}
// 다른 사람의 풀이 : 이중 for문으로 해결한 방법
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr, vector<vector<int>> intervals) {
vector<int> answer;
for (auto& interval : intervals) {
for (int i = interval[0]; i <= interval[1]; ++i)
answer.push_back(arr[i]);
}
return answer;
}
결과
프로그래머스 코딩 기초 트레이닝 : 2의 영역
https://school.programmers.co.kr/learn/courses/30/lessons/181894
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 arr가 주어집니다.
배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.
제한사항
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 ≤ 10
입출력 예
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer;
auto it = find(arr.rbegin(), arr.rend(), 2);
int first = distance(arr.begin(), find(arr.begin(), arr.end(), 2));
int last = distance(arr.begin(), it.base()) - 1;
if(first == arr.size())
answer.push_back(-1);
else
for (int i = first; i <= last; i++)
answer.push_back(arr[i]);
return answer;
}
결과
프로그래머스 코딩 기초 트레이닝 : 배열 조각하기
https://school.programmers.co.kr/learn/courses/30/lessons/181893
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 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의 길이 보다 작습니다.
입출력 예
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr, vector<int> query) {
for (int i = 0; i < query.size(); i++) {
if (i % 2 == 0)
arr = vector<int> (arr.begin(), arr.begin() + query[i] + 1);
else
arr = vector<int> (arr.begin() + query[i], arr.end());
}
return arr;
}
결과
여담
4번째 문제 '2의 영역'을 제외하고는 크게 어려웠던 문제는 없었다.
이 문제를 나는 find 함수와 distance 함수로 다 해결하려다 보니 이것저것 찾아보고, 코드 실행으로 테스트도 해보고 하면서 생각보다 오래걸렸다.
처음에 시도했을 때 테스트 케이스를 통과해서 쉽게 해결했구나~ 했는데, 정작 제출후 채점해보니 거의 다 틀려서 살짝 멘붕도 왔었다.... 그래도 계속 찾아보고 실험해보면서 해결했으니 다행이다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 코딩 기초 트레이닝 PART 14(C++) (0) | 2024.01.30 |
---|---|
[프로그래머스] 코딩 기초 트레이닝 PART 13(C++) (0) | 2024.01.29 |
[프로그래머스] 코딩 기초 트레이닝 PART 11(C++) (0) | 2024.01.18 |
[프로그래머스] 코딩 기초 트레이닝 PART 10(C++) (0) | 2024.01.17 |
[프로그래머스] 코딩 기초 트레이닝 PART 9(C++) (0) | 2024.01.16 |