3월 3일 개강 했습니다! 오랫동안 기다리던 카테부 클라우드 네이티브 과정 공고가 올라왔습니다.
4월 초에 있을 카카오 테크 부스캠프를 위해 프로그래머스의 카카오 기출을 전부 풀어보려고 합니다.
처음 보는 코테라 공부 시간은 하루에 4~6h 정도로 잡았습니다(두근두근)
codetree, 바킹독의 내용도 관련 함수, 내용 모두 정리해 두겠습니다.
<공부 방법>
1. 프로그래머스 카카오 기출 문제 풀기
2. 관련 개념 및 함수 정리
3. codetree에서 유사 문제 풀시
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
1. 문자열에서 사용되는 함수 정리
string s;
문자열의 길이 구하는 함수 (C언어는 strlen()와 동일함)
s.length();
소수점 N자리까지 반올림 cout<<fixed << setpercision(자릿수)<< 원하는 변수
#include<iomanip>
double d =3.1355
cout<< fixed << setpercision(2)<< d; // 3.14
예) 입력된 문자열을 공백 없이 출력하고 싶을떄
for(int i=0; i<s.length(), i++)
{
if(s[i]!=' ')
{
cout<<s[i];
}
}
공백과 tab까지 하나의 문자열 안에 담는 함수
getline(cin, s);
예) n 문단을 모두 한 문자열에 담고 싶을떄
for(int i=0; i<n; i++)
{
string tmp;
getline(cin, tmp);
s+=tmp;
}
예) A에 B 문자열 합치는 함수 : A.append(B)
string a ='hello';
string b ='world';
a.append(b);
cout<< a; // hello world
string arr[3] = {'abc', 'def'};
문자열 리스트에서 특정 위치의 문자(char)만 뽑고 싶을떄
cout<< arr[0][1]; //b
부분 문자열 비교 : s.substr( 시작 인덱스 , 비교할 문자열 길이)★
Ex) ka라는 특정 문자열이 존재하는지 알아보기
string s="kakao"
bool e = false;
for(int i=0; i<length-1; i++)
{
if(s.substr(i,2)=="ka")
{
e=true;
}
}
활용 ) 문자열 내 문자 제거 용도로 사용가능
string s ="baknana";
s=s.substr(0,2)+s.sub(3); // banana
활용) 문자열을 한칸씩 미는 용도로 사용 가능
string s ="banana";
s=s.substr(len-1,1) +s.substr(0,len-1); //abanan
문자열 삭제 함수 : erase(시작 인덱스, 삭제할 문자열 수)
string s ="baknana";
s.erase(2,1); //banana
대소문자 변환 : tolower(문자열) | #include<cctype>
#include<cctype>
char x ='C';
cout<<(char)tolower(x); // c
char y ='a'
cout<<(char)toupper(y); //A
알파벳인지 숫자인지 여부 확인 : isalpha(변수) , isdigit( 변수)
→ 결과가 true, false로 반환됨.
문자열을 정수로 변환 : stoi(문자열 변수) ★
#include<string>
string a="123";
int a_int =stoi(a)+1;
cout<<a_int;//124
정수를 문자열로 변환 : to_string( 정수형 변수) ★
#include<string>
int a=123;
string a_str;
a_str =to_string(a);
cout<<a_str +"56"; //12356
문자열 비교 : 사전순으로 누가 앞에 있는지
cout<< ("aba" <"bc"); // 1 : 시전 순으로 앞에 문자열이 작을 수록 대소 비교 작게.
cout<< ("bd" < "bc"); // 0 : 첫번째 똑같음. 두번째는 c가 더 작음으로 대소 비교 틀림.
2021 카카오 채용 연계형 인텁십 문제
1. 내 풀이
#include<iostream>
#include <string>
#include <vector>
using namespace std;
// 배열 인덱스랑 문자열이랑 매치됨.
string arr[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int solution(string s) {
//int answer = 0;
string ans;
int num=0;
while(num<s.length())// 다 숫자로 바꾸면 종료되어야 함.
{
if(isdigit(s[num]))// 숫자인 경우 그대로
{
ans+=s[num];
num++;
}
else// 문자인 경우 -> 어떤 단어인지 찾아야 함.
{
// 자릿수로 찾을 수 없음! , 문자 첫글자로 찾을 수 없음. => 부분 문자열로 찾기
for(int j=0; j<10; j++)
{
if(s.substr(num,arr[j].length())==arr[j])// 일치하는 거 찾기
{
ans+=to_string(j);
num+=arr[j].length();
break;
}
}
}
}
return stoi(ans);
//return answer;
}
int main()
{
string s;
cin>>s;
cout<<solution(s);
}
https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

2. 다른 사람 풀이 ) 개인적으로 제일 깔끔하다고 느낀 풀이
#include <string>
#include <vector>
#include <algorithm>
#include <regex>
using namespace std;
vector<string> numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
int solution(string s) {
int answer = 0;
regex r;
for(int i = 0; i < numbers.size(); i++) {
r = numbers[i];
s = regex_replace(s, r, to_string(i));
}
answer = stoi(s);
return answer;
}
메모) 정규형 함수 (regex_replace), 문제에서 주어진 vector 사용!
'[알고리즘] > [CodeUp][CodeTree]' 카테고리의 다른 글
| [카테부 코딩 테스트 준비 ] [1차]비밀지도 C++ (1) | 2026.03.04 |
|---|---|
| [codetree] Trail2 완전탐색 -이상한 진수 2 (답) (0) | 2025.12.29 |
| [codetree] 프로그래밍 연습 _시뮬레이션2_최장 연속 부분 수열 (0) | 2025.03.27 |
| [codetree] 프로그래밍 연습 _시뮬레이션1_ 구간 칠하기 C++ (4) | 2025.02.15 |
| [codetree] 프로그래밍 연습 _정렬된 숫자 위치 알아내기 C++ (0) | 2025.01.29 |