일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 기초
- 다이나믹 프로그래밍
- 3월
- 입문
- 8월
- 코딩 기초 트레이닝
- c++
- 골드메탈
- 2022년
- 단계별로 풀어보기
- 2월
- 유니티
- 백준
- 코딩 테스트
- 7월
- 1월
- 개인 프로젝트
- todolist
- 자료 구조
- 9월
- C/C++
- 수학
- 10월
- 개인 프로젝트 - 런앤건
- 2025년
- 2024년
- 2023년
- 5월
- 프로그래머스
- 6월
- Today
- Total
기록 보관소
[프로그래머스] 코딩 기초 트레이닝 PART 15(C++) 본문
프로그래머스 코딩 테스트 연습 : 코딩 기초 트레이닝(C++)
https://school.programmers.co.kr/learn/challenges?order=recent&languages=cpp&partIds=44139&page=4
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
프로그래머스 코딩 기초 트레이닝 : 조건에 맞게 수열 변환하기 1
https://school.programmers.co.kr/learn/courses/30/lessons/181882
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 arr가 주어집니다.
arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다.
그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000,000
- 1 ≤ arr의 원소의 값 ≤ 100
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer;
for (auto num : arr) {
if (num >= 50 && num % 2 == 0)
answer.push_back(num / 2);
else if (num < 50 && num % 2 != 0)
answer.push_back(num * 2);
else
answer.push_back(num);
}
return answer;
}
// 다른 사람의 풀이 : 삼항연산자로 해결하는 방법
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
for(auto& i : arr)
i = (i & 1) ? (i < 50 ? i << 1 : i) : (i >= 50 ? i >> 1 : i);
return arr;
}
// 다른 사람의 풀이 : answer에 넣지 않고 arr을 바로 return 하는 방법
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer;
for(auto &n : arr){
if(n & 1){
if(50 > n) n *= 2;
}else{
if(50 <= n) n /= 2;
}
}
return arr;
}
결과
프로그래머스 코딩 기초 트레이닝 : 조건에 맞게 수열 변환하기 2
https://school.programmers.co.kr/learn/courses/30/lessons/181881
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 arr가 주어집니다.
arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.
이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다.
이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.
단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000,000
- 1 ≤ arr의 원소의 값 ≤ 100
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> arr) {
int answer = 0;
vector<int> temp;
while (temp != arr) {
temp = arr;
for (auto &num : arr) {
if (num >= 50 && num % 2 == 0)
num /= 2;
else if (num < 50 && num % 2 != 0) {
num *= 2;
num++;
}
}
answer++;
}
return (answer - 1);
}
결과
프로그래머스 코딩 기초 트레이닝 : 1로 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/181880
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다.
예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.
- 10 / 2 = 5
- (5 - 1) / 2 = 4
- 4 / 2 = 2
- 2 / 2 = 1
위와 같이 4번의 나누기 연산으로 1이 되었습니다.
정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤ num_list의 길이 ≤ 15
- 1 ≤ num_list의 원소 ≤ 30
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> num_list) {
int answer = 0;
for (auto &num : num_list)
while (num != 1) {
if (num & 1) {
num--;
num /= 2;
}
else
num /= 2;
answer++;
}
return answer;
}
// 다른 사람의 풀이 : 홀짝을 구분하지 않고(int형은 2로 나눠도 홀짝 결과가 같음)해결하는 방법
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> num_list) {
int answer = 0;
for(int num : num_list)
{
while(num != 1)
{
num /= 2;
answer++;
}
}
return answer;
}
결과
프로그래머스 코딩 기초 트레이닝 : 길이에 따른 연산
https://school.programmers.co.kr/learn/courses/30/lessons/181879
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요.
제한사항
- 2 ≤ num_list의 길이 ≤ 20
- 1 ≤ num_list의 원소 ≤ 9
- num_list의 원소를 모두 곱했을 때 2,147,483,647를 넘는 입력은 주어지지 않습니다.
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> num_list) {
int answer = 0;
if (num_list.size() > 10)
for (auto num : num_list)
answer += num;
else {
answer = 1;
for (auto num : num_list)
answer *= num;
}
return answer;
}
// 다른 사람의 풀이 : 삼항 연산자와 accumulate()함수로 해결하는 방법
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> l) {
return l.size() >= 11 ? accumulate(l.begin(), l.end(), 0) : accumulate(l.begin(), l.end(), 1, multiplies<int>());
}
결과
프로그래머스 코딩 기초 트레이닝 : 원하는 문자열 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/181878
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
알파벳으로 이루어진 문자열 myString과 pat이 주어집니다.
myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.
단, 알파벳 대문자와 소문자는 구분하지 않습니다.
제한사항
- 1 ≤ myString의 길이 ≤ 100,000
- 1 ≤ pat의 길이 ≤ 300
- myString과 pat은 모두 알파벳으로 이루어진 문자열입니다.
입출력 예
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(string myString, string pat) {
transform(myString.begin(), myString.end(), myString.begin(), ::tolower);
transform(pat.begin(), pat.end(), pat.begin(), ::tolower);
return (myString.find(pat) != string::npos);
}
결과
여담
2번째로 풀었던 문제인 '조건에 맞춰 수열 변환하기 2'은 문제를 잘못 이해하고 배열의 원소를 비교하는 줄 알아서 시간을 낭비한걸 제외하면 큰 어려움은 없었다. 예 설명에서 arr(5), arr(6)을 arr[5], arr[6]으로 보는 바람에...
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 코딩 기초 트레이닝 PART 17(C++) (0) | 2024.02.05 |
---|---|
[프로그래머스] 코딩 기초 트레이닝 PART 16(C++) (2) | 2024.02.02 |
[프로그래머스] 코딩 기초 트레이닝 PART 14(C++) (0) | 2024.01.30 |
[프로그래머스] 코딩 기초 트레이닝 PART 13(C++) (0) | 2024.01.29 |
[프로그래머스] 코딩 기초 트레이닝 PART 12(C++) (0) | 2024.01.19 |