[알고리즘]/[CodeUp][CodeTree]

[카테부 코딩 테스트 준비 ] 숫자 문자열과 영단어 C++

우당탕탕 개발 일지 2026. 3. 3. 20:59
728x90

3월 3일 개강 했습니다! 오랫동안 기다리던 카테부 클라우드 네이티브 과정 공고가 올라왔습니다. 

 

4월 초에 있을 카카오 테크 부스캠프를 위해  프로그래머스의 카카오 기출을 전부 풀어보려고 합니다.

처음 보는 코테라 공부 시간은 하루에 4~6h 정도로 잡았습니다(두근두근) 

codetree, 바킹독의 내용도 관련 함수, 내용 모두 정리해 두겠습니다. 

 

<공부 방법> 

1. 프로그래머스 카카오 기출 문제 풀기 

2. 관련 개념 및 함수 정리 

3. codetree에서 유사 문제 풀시 

 

https://school.programmers.co.kr/learn/challenges?tab=all_challenges&order=acceptance_desc&partIds=31236%2C18498%2C17931%2C22586%2C25448%2C37527%2C58464%2C20069%2C17214%2C12286%2C9317&page=1

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

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 사용!