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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

구현문제

#include <string>
#include <vector>
#include<algorithm>
#include<iostream>

using namespace std;
//대소문자 구분x
//정렬 조건 h: 오름차순 , n: 숫자로만들어서 오름차순정렬

bool comp(string v, string t) {
    int t_size;
    if (v.size() > t.size()) {
        t_size = t.size();
    }
    else {
        t_size = v.size();
    }
    for (int idx = 0; idx < t_size; ++idx) {
        //대소문자 구분하지 않으면서도 기존 벡터 변형 없게 만들려고
        //임시값 ch1, ch2 생성
        char ch1 = v[idx];
        char ch2 = t[idx];
        //header 단계
        //idx별 문자가 동일할 때 먼저 숫자에 접근할 경우 true를 리턴해 낮은 은 값 정렬
        //둘다 숫자 접근 시 다음 단계인 숫자 비교로 넘어감
        if (ch1 >= '0' && ch1 <= '9' && ch2 >= '0' && ch2 <= '9')break;
        if (ch1 >= '0' && ch1 <= '9') {
            return true;
            break;
        }
        if (ch2 >= '0' && ch2 <= '9') {
            return false;
            break;
        }
        if (ch1 >= 'a' && ch1 <= 'z') {
            ch1 = 'A' + ch1 - 'a';
        }
        if (ch2 >= 'a' && ch2 <= 'z') {
            ch2 = 'A' + ch2 - 'a';
        }

        if (ch1 < ch2) return true;
        if (ch1 > ch2) return false;
    }

    // if(v.size() < t.size()) return true;
     //if(v.size() > t.size()) return false;

// 숫자형태의 문자열 변수
    string vs = "";
    string ts = "";
    int flag = 0;
    int cnt = 0;
    //숫자는 5개 제한.
    for (int idx = 0; idx < v.size(); ++idx) {
        if (v[idx] >= '0' && v[idx] <= '9') {
            vs += v[idx];
            cnt++;
            flag = 1;
        }
        else {
            if (flag == 1) {
                break;
            }
        }
        if (cnt >= 5)break;
    }
    flag = 0;
    cnt = 0;
    for (int idx = 0; idx < t.size(); ++idx) {
        if (t[idx] >= '0' && t[idx] <= '9') {
            ts += t[idx];
            cnt++;
            flag = 1;
        }
        else {
            if (flag == 1) {
                break;
            }
        }
        if (cnt >= 5)break;
    }

//숫자 비교해서 오름차순 정렬 진행.
    int vVal = 0;
    int tVal = 0;
    vVal = stoi(vs);
    tVal = stoi(ts);
    if (vVal < tVal)return true;
    if (vVal > tVal)return false;
    return false;
}
vector<string> solution(vector<string> files) {

    stable_sort(files.begin(), files.end(), comp); // sort로 하면 안정적인 정렬이 아니라 함. stable_ 을 넣어야함
    vector<string> answer;
    for (int y = 0; y < files.size(); ++y) {
        for (int x = 0; x < files[y].size(); ++x) {
            cout << files[y][x];
        }
        cout << endl;
    }

    return files;
}

int main(void) {
    solution({ "foo9.txt", "foobar1.txt" });
}

'프로그래머스 > 코딩테스트' 카테고리의 다른 글

lv2) 혼자 놀기의 달인  (1) 2026.07.06
lv3) 정수 삼각형  (0) 2026.06.25
lv2 ) 완전범죄(틀림) 그리디 vs DP  (0) 2026.06.19
lv2) 멀리 뛰기  (0) 2026.06.16
비트마스킹 관련 연습 (7다)  (0) 2026.06.03

+ Recent posts