일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 2025년
- 3월
- 2월
- 개인 프로젝트 - 런앤건
- 유니티 심화과정
- c++
- 골드메탈
- 1월
- 코딩 테스트
- 자료 구조
- 입문
- 유니티
- 다이나믹 프로그래밍
- 10월
- 기초
- 2024년
- 게임 엔진 공부
- 4월
- 코딩 기초 트레이닝
- 2023년
- 백준
- todolist
- 수학
- 2022년
- C/C++
- 프로그래머스
- 5월
- 개인 프로젝트
- 단계별로 풀어보기
- 7월
- Today
- Total
기록 보관소
[프로그래머스] 코딩 기초 트레이닝 PART 18(C++) 본문
프로그래머스 코딩 테스트 연습 : 코딩 기초 트레이닝(C++)
https://school.programmers.co.kr/learn/challenges?order=recent&languages=cpp&partIds=44139&page=5
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
프로그래머스 코딩 기초 트레이닝 : x 사이의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/181867
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자열 myString이 주어집니다.
myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ myString의 길이 ≤ 100,000
- myString은 알파벳 소문자로 이루어진 문자열입니다.
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(string myString) {
vector<int> answer;
int count = 0;
for(auto str : myString) {
if (str == 'x') {
answer.push_back(count);
count = 0;
}
else
count++;
}
answer.push_back(count);
return answer;
}
결과
프로그래머스 코딩 기초 트레이닝 : 문자열 잘라서 정렬하기
https://school.programmers.co.kr/learn/courses/30/lessons/181866
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자열 myString이 주어집니다.
"x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 빈 문자열은 반환할 배열에 넣지 않습니다.
제한사항
- 1 ≤ myString ≤ 100,000
- myString은 알파벳 소문자로 이루어진 문자열입니다.
입출력 예
코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> solution(string myString) {
vector<string> answer;
string temp = "";
for(auto str : myString) {
if (str == 'x') {
if (temp != "") {
answer.push_back(temp);
temp = "";
}
}
else
temp += str;
}
if (temp != "")
answer.push_back(temp);
sort(answer.begin(), answer.end());
return answer;
}
// 다른 사람의 풀이 1 : x를 모두 공백으로 대체한 뒤, vector에 저장하는 방법
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;
vector<string> solution(string myString) {
vector<string> answer;
for(auto& c : myString)
{
if( c == 'x')
{
c = ' ';
}
}
string str;
stringstream ss;
ss.str(myString);
while(ss >> str)
{
answer.emplace_back(str);
}
sort(answer.begin(),answer.end());
return answer;
}
// 다른 사람의 풀이 2 : 문자열을 substr로 잘라서 벡터에 넣어서 해결하는 방법
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> solution(string myString) {
vector<string> answer;
int index = 0;
for(int i=0;i<myString.length();i++){
if(myString[i]=='x'){
if(index!=i)answer.push_back(myString.substr(index,i-index));
index = i+1;
}
}
if(index!=myString.length())answer.push_back(myString.substr(index,myString.length()-index));
sort(answer.begin(),answer.end());
return answer;
}
결과
프로그래머스 코딩 기초 트레이닝 : 간단한 식 계산하기
https://school.programmers.co.kr/learn/courses/30/lessons/181865
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자열 binomial이 매개변수로 주어집니다.
binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다.
주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.
제한사항
- 0 ≤ a, b ≤ 40,000
- 0을 제외하고 a, b는 0으로 시작하지 않습니다.
입출력 예
코드
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int solution(string binomial) {
vector<string> v;
string str;
stringstream ss(binomial);
int answer = 0;
while(ss >> str)
v.push_back(str);
if (v[1] == "+") answer = stoi(v[0]) + stoi(v[2]);
else if (v[1] == "-") answer = stoi(v[0]) - stoi(v[2]);
else answer = stoi(v[0]) * stoi(v[2]);
return answer;
}
// 다른 사람의 풀이 1 : vector 없이 string과 char로 해결하는 방법
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int solution(string binomial) {
int answer = 0;
int a,b;
char op;
stringstream ss;
ss.str(binomial);
ss >> a>> op >>b;
if(op == '+')
{
answer = a+b;
}
else if(op == '-')
{
answer = a-b;
}
else if(op == '*')
{
answer = a*b;
}
return answer;
}
// 다른 사람의 풀이 2 : substr을 이용해 해결하는 방법
#include <string>
#include <vector>
using namespace std;
int solution(string binomial)
{
int answer=0;
for(int i=0; i<binomial.length(); i++)
{
if(binomial[i]=='+')
answer=stoi(binomial.substr(0, i-1))+stoi(binomial.substr(i+2));
else if(binomial[i]=='-')
answer=stoi(binomial.substr(0, i-1))-stoi(binomial.substr(i+2));
else if(binomial[i]=='*')
answer=stoi(binomial.substr(0, i-1))*stoi(binomial.substr(i+2));
}
return answer;
}
결과
프로그래머스 코딩 기초 트레이닝 : 문자열 바꿔서 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/181864
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다.
myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.
제한사항
- 1 ≤ myString의 길이 ≤ 100
- 1 ≤ pat의 길이 ≤ 10
- myString과 pat는 문자 "A"와 "B"로만 이루어진 문자열입니다.
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
int solution(string myString, string pat) {
for (auto &str : pat) {
if (str == 'A')
str = 'B';
else
str = 'A';
}
return ((myString.find(pat) != string::npos) ? 1 : 0);
}
// 다른 사람의 풀이 : transform을 사용하는 방법
#include <string>
#include <algorithm>
using namespace std;
int solution(string s, string p) {
transform(p.cbegin(), p.cend(), p.begin(), [](char c) {return c == 'A' ? 'B' : 'A'; });
return s.find(p)!=string::npos;
}
결과
프로그래머스 코딩 기초 트레이닝 : rny_string
https://school.programmers.co.kr/learn/courses/30/lessons/181863
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다.
문자열 rny_string이 주어질 때, rny_string의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ rny_string의 길이 ≤ 100
- rny_string은 영소문자로만 이루어져 있습니다.
입출력 예
코드
#include <string>
#include <vector>
using namespace std;
string solution(string rny_string) {
string answer = "";
for (auto str : rny_string) {
if (str == 'm')
answer += "rn";
else
answer += str;
}
return answer;
}
// 다른 사람의 풀이 1 : 정규 표현식(regex)을 이용해 replace하기
#include <string>
#include <vector>
#include <regex>
using namespace std;
string solution(string rny_string) {
string answer = "";
rny_string = regex_replace(rny_string,regex("m"),"rn");
answer= rny_string;
return answer;
}
// 다른 사람의 풀이 2 : find와 replace 함수를 이용해서 해결하는 방법
#include <string>
using namespace std;
string solution(string s) {
for(int it=s.find("m");it!=-1;it=s.find("m"))
if (it!=string::npos)
s.replace(it, 1, "rn");
return s;
}
결과
여담
오늘 풀었던 2번째 문제 '문자열 잘라서 정렬하기'가 개인적으로 정말 아쉽다.
코드에서도 보이듯 억지로 되는대로 풀고 제출해서 코드도 지저분해졌고 뭔가 엉성하게 되버렸다.
구멍 뚫린 곳에 판자로 덮어버리느라 뭔가 누더기가 된 배를 본 느낌이랄까.
다른 사람의 풀이를 보면서 오늘도 부족함을 많이 느낀다. 지난 시간에 공백을 지우는 string stream을 잘 써놓고 활용할 생각도 못했던게 정말 아쉽다.
나도 언젠가 저렇게 잘 응용할 수 있기를...
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 코딩 기초 트레이닝 PART 20(C++) (0) | 2024.02.15 |
---|---|
[프로그래머스] 코딩 기초 트레이닝 PART 19(C++) (0) | 2024.02.13 |
[프로그래머스] 코딩 기초 트레이닝 PART 17(C++) (0) | 2024.02.05 |
[프로그래머스] 코딩 기초 트레이닝 PART 16(C++) (2) | 2024.02.02 |
[프로그래머스] 코딩 기초 트레이닝 PART 15(C++) (0) | 2024.02.01 |