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


코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
for (auto query : queries)
for (int i = query[0]; i <= query[1]; i++)
if (i % query[2] == 0)
arr[i] += 1;
return arr;
}
결과

프로그래머스 코딩 기초 트레이닝 : 배열 만들기 2
https://school.programmers.co.kr/learn/courses/30/lessons/181921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
제한 사항
- 1 ≤ l ≤ r ≤ 1,000,000
입출력 예


코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int l, int r) {
vector<int> answer;
for (int i = l; i <= r; i++) {
string temp = to_string(i);
bool isWrong = false;
for (int j = 0; j < temp.size(); j++)
if (temp[j] != '5' && temp[j] != '0' && !isWrong)
isWrong = true;
if (!isWrong)
answer.push_back(i);
}
if (!answer.size())
answer.push_back(-1);
return answer;
}
// 다른 사람의 풀이 : 10으로 나눈 나머지 값으로 찾는 방법
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int l, int r) {
vector<int> answer;
int temp;
int a;
for(int i =l; i<=r; i++){
temp = i;
a=1;
while(temp>0){
if(temp%10 != 5 && temp%10 != 0){
a=0;
break;
}
temp /= 10;
}
if(a) answer.push_back(i);
}
if(answer.size()==0) answer.push_back(-1);
return answer;
}
결과

프로그래머스 코딩 기초 트레이닝 : 카운트 업
https://school.programmers.co.kr/learn/courses/30/lessons/181920
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 start_num와 end_num가 주어질 때, start_num부터 end_num까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
제한 사항
- 0 ≤ start_num ≤ end_num ≤ 50
입출력 예


코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int start_num, int end_num) {
vector<int> answer;
for (int i = start_num; i <= end_num; i++)
answer.push_back(i);
return answer;
}
// 다른 사람의 풀이 : iota 함수를 사용한 방법
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(int start, int end) {
vector<int> answer(end - start + 1);
iota(answer.begin(), answer.end(), start);
return answer;
}
결과

프로그래머스 코딩 기초 트레이닝 : 콜라츠 수열 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/181919
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.
그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.
계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.
임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.
제한 사항
- 1 ≤ n ≤ 1,000
입출력 예


코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n) {
vector<int> answer;
answer.push_back(n);
while (n != 1) {
if (n % 2 == 0)
n /= 2;
else
n = 3 * n + 1;
answer.push_back(n);
}
return answer;
}
결과

프로그래머스 코딩 기초 트레이닝 : 배열 만들기 4
https://school.programmers.co.kr/learn/courses/30/lessons/181918
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.
변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.
- 만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
- stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
- stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.
위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.
제한 사항
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 ≤ 100,000
입출력 예


코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> stk;
for (int i = 0; i < arr.size();) {
if (!stk.size()) {
stk.push_back(arr[i]);
i++;
}
else if (stk.back() < arr[i]) {
stk.push_back(arr[i]);
i++;
}
else
stk.pop_back();
}
return stk;
}
// 다른 사람의 풀이 : erase 함수를 사용하는 방법
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> stk;
int i = 0;
while (i<arr.size()) {
if (stk.empty()) stk.push_back(arr[i++]);
else if (stk.back() < arr[i]) stk.push_back(arr[i++]);
else stk.erase(stk.end()-1);
}
return stk;
}
결과

여담
배열 만들기 2를 제외하고는 크게 어려운 문제는 없었다.
배열 만들기 2도 처음에 나머지 연산으로 접근했는데, 10으로 계산할 것을 생각 못하고 결국 string으로 틀어서 좀 더 머릿속이 복잡해졌던 것 같다.
생각보다 쉬운 문제였는데 괜히 고생한 것 같아서 아쉽다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 코딩 기초 트레이닝 PART 9(C++) (0) | 2024.01.16 |
---|---|
[프로그래머스] 코딩 기초 트레이닝 PART 8(C++) (2) | 2024.01.15 |
[프로그래머스] 코딩 기초 트레이닝 PART 6(C++) (2) | 2024.01.10 |
[프로그래머스] 코딩 기초 트레이닝 PART 5(C++) (0) | 2024.01.09 |
[프로그래머스] 코딩 기초 트레이닝 PART 4(C++) (2) | 2024.01.08 |