일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다이나믹 프로그래밍
- 코딩 기초 트레이닝
- 5월
- 1월
- 2022년
- 유니티
- C/C++
- 골드메탈
- 개인 프로젝트
- 10월
- todolist
- 개인 프로젝트 - 런앤건
- 백준
- 입문
- 2023년
- 자료 구조
- 2월
- 기초
- 3월
- 단계별로 풀어보기
- c++
- 게임 엔진 공부
- 2025년
- 2024년
- 수학
- 프로그래머스
- 코딩 테스트
- 4월
- 7월
- 유니티 심화과정
- Today
- Total
기록 보관소
[프로그래머스] 코딩 기초 트레이닝 PART 6(C++) 본문
프로그래머스 코딩 테스트 연습 : 코딩 기초 트레이닝(C++)
https://school.programmers.co.kr/learn/challenges?order=recent&languages=cpp&page=2&partIds=44139
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
프로그래머스 코딩 기초 트레이닝 : 마지막 두 원소
https://school.programmers.co.kr/learn/courses/30/lessons/181927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을, 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
제한 사항
- 2 ≤ num_list의 길이 ≤ 10
- 1 ≤ num_list의 원소 ≤ 9
입출력 예

코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> num_list) {
vector<int> answer;
for (int i = 0; i < num_list.size(); i++) {
answer.push_back(num_list[i]);
if (i == num_list.size() - 1)
answer.push_back(num_list[i] > num_list[i - 1] ? num_list[i] - num_list[i - 1] : num_list[i] * 2);
}
return answer;
}
// 다른 사람의 풀이 : num_list에 값을 추가해 바로 return 하는 방법
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> num_list) {
int e = num_list[num_list.size()-1];
int e1 = num_list[num_list.size()-2];
num_list.push_back( (e>e1)? e-e1 : e*2 );
return num_list;
}
결과

프로그래머스 코딩 기초 트레이닝 : 수 조작하기 1
https://school.programmers.co.kr/learn/courses/30/lessons/181926
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 n과 문자열 control이 주어집니다.
control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.
- "w" : n이 1 커집니다.
- "s" : n이 1 작아집니다.
- "d" : n이 10 커집니다.
- "a" : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.
제한 사항
- -100,000 ≤ n ≤ 100,000
- 1 ≤ control의 길이 ≤ 100,000
- control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.
입출력 예


코드
#include <string>
#include <vector>
using namespace std;
int solution(int n, string control) {
for (char con : control) {
if (con == 'w')
n += 1;
else if (con == 's')
n -= 1;
else if (con == 'd')
n += 10;
else
n -= 10;
}
return n;
}
// 다른 사람의 풀이 : map을 사용하는 방법
#include <string>
#include <vector>
#include <map>
using namespace std;
map <char, int> m = {{'w', 1}, {'s', -1}, {'d', 10}, {'a', -10}};
int solution(int n, string control) {
int answer = n;
for(char ch : control)
answer += m[ch];
return answer;
}
결과

프로그래머스 코딩 기초 트레이닝 : 수 조작하기 2
https://school.programmers.co.kr/learn/courses/30/lessons/181925
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 numLog가 주어집니다.
처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.
- "w" : 수에 1을 더한다.
- "s" : 수에 1을 뺀다.
- "d" : 수에 10을 더한다.
- "a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다.
즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.
주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.
제한 사항
- 2 ≤ numLog의 길이 ≤ 100,000
- -100,000 ≤ numLog[0] ≤ 100,000
- 1 ≤ i ≤ numLog의 길이인 모든 i에 대해 |numLog[i] - numLog[i - 1]|의 값은 1 또는 10입니다.
입출력 예



코드
#include <string>
#include <vector>
#include <map>
using namespace std;
string solution(vector<int> numLog) {
string answer = "";
map<int, char> m = {{1, 'w'}, {-1, 's'}, {10, 'd'}, {-10, 'a'}};
for (int i = 1; i < numLog.size(); i++)
answer += m[numLog[i] - numLog[i - 1]];
return answer;
}
결과

프로그래머스 코딩 기초 트레이닝 : 수열과 구간 쿼리 3
https://school.programmers.co.kr/learn/courses/30/lessons/181924
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
제한 사항
- 1 ≤ arr의 길이 ≤ 1,000
- 0 ≤ arr의 원소 ≤ 1,000,000
- 1 ≤ queries의 길이 ≤ 1,000
- 0 ≤ i < j < arr의 길이
입출력 예


코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
for (int i = 0; i < queries.size(); i++) {
vector<int> tempVec = queries[i];
int tempNum = arr[tempVec[0]];
arr[tempVec[0]] = arr[tempVec[1]];
arr[tempVec[1]] = tempNum;
}
return arr;
}
// 다른 사람의 풀이 1 : swap 함수를 사용하는 방법
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
for(const auto& q : queries)
{
swap(arr[q[0]],arr[q[1]]);
}
return arr;
}
// 다른 사람의 풀이 2 : auto를 사용하는 방법
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
vector<int> answer;
int temp;
for(auto query:queries){
temp = arr[query[0]];
arr[query[0]] = arr[query[1]];
arr[query[1]] = temp;
}
return arr;
}
결과

프로그래머스 코딩 기초 트레이닝 : 수열과 구간 쿼리 2
https://school.programmers.co.kr/learn/courses/30/lessons/181923
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
제한 사항
- 1 ≤ arr의 길이 ≤ 1,000
- 0 ≤ arr의 원소 ≤ 1,000,000
- 1 ≤ queries의 길이 ≤ 1,000
- 0 ≤ s ≤ e < arr의 길이
- 0 ≤ k ≤ 1,000,000
입출력 예


코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
vector<int> answer;
for (auto query : queries) {
int min = 1000001;
for (int i = query[0]; i <= query[1]; i++)
if (arr[i] > query[2] && arr[i] < min)
min = arr[i];
if (min != 1000001)
answer.push_back(min);
else
answer.push_back(-1);
}
return answer;
}
결과

여담
마지막 문제에서 헷갈려서 시간을 보낸 것 외에는 아직까지는 큰 문제 없이 잘 해결하고 있다.
중간에 map을 사용해서 문제를 해결한 것이 정말 인상 깊어서 다음 문제에서 바로 map을 사용해 해결했다ㅎㅎ
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 코딩 기초 트레이닝 PART 8(C++) (2) | 2024.01.15 |
---|---|
[프로그래머스] 코딩 기초 트레이닝 PART 7(C++) (2) | 2024.01.11 |
[프로그래머스] 코딩 기초 트레이닝 PART 5(C++) (0) | 2024.01.09 |
[프로그래머스] 코딩 기초 트레이닝 PART 4(C++) (2) | 2024.01.08 |
[프로그래머스] 코딩 기초 트레이닝 PART 3(C++) (2) | 2024.01.05 |