본문 바로가기
Study/Coding Test

[프로그래머스] C++ 문자열 다루기 관련 문제들

by 들숨날숨흡 2023. 8. 2.
728x90

원래 파이썬 유저지만.. 코테 사용 가능 언어에 파이썬이 없어서.. 갑작스럽데 C++ 공부하는 중...

근데 문자열 다루는게 파이썬보다 어려워서 관련 문제를 모아보았습니당.

당장 내일이라 많이 모으진 못했지만.. 문제 풀때 도움될만한 것들 위주로...


 

(1) 문자열 다루기 기본

https://school.programmers.co.kr/learn/courses/30/lessons/12918?language=cpp 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>
#include <cctype>

using namespace std;

bool solution(string s) {
    bool answer = true;
    if(s.size() == 4 || s.size() == 6){
        for(int i = 0; i<s.size(); i++){
            if (isdigit(s[i]) == 0){
                answer = false;
            }
        }
    }
    else answer = false;
    
    return answer;
}

 

(2) 이상한 문자 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/12930?language=cpp 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    int count = 0;
    for(int i = 0; i<s.size(); i++){
        if (s[i] == ' '){
            count = 0;
            answer += ' ';
            continue;
        }
        if (count % 2 == 0){
            answer += toupper(s[i]);
            count++;
        }
        else{
            answer += tolower(s[i]);
            count++;
        }
    }
    return answer;
}

 

(3) 문자열 압축

https://school.programmers.co.kr/learn/courses/30/lessons/60057

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#include <string>
 
using namespace std;
 
int solution(string s) {
    int answer = s.length();
    for (int i = 1; i <= s.length() / 2; i++) {
        int len = s.length();
        for (int j = 0; j < s.length(); j++) {
            for (int count = 0, z = i; j + z < s.length(); z += i){
                if (s.substr(j, i) == s.substr(j + z, i))    count++;
                else {
                    len -= i * count;
                    if (count)     len += to_string(count + 1).length();
                    j += z - 1;
                    break;
                }
                if (j + z + i >= s.length()) {
                    len -= i * count;
                    len += to_string(count + 1).length();
                    j += z;
                }
            }
        }
        if (len < answer)    answer = len;
    }
    return answer;
}

 

728x90