상세 컨텐츠

본문 제목

[Level1.] 개인정보 수집 유효기간 C++

C++/Programmers

by J2on 2024. 2. 3. 18:56

본문

<< 문제 >>

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

 

프로그래머스

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

programmers.co.kr

사실 뭐 크게 어려운 문제는 아닙니다.

 

그냥 기한 잘 맞췄나 체크만 하면 되는 문제인데,,,

 

C++로 String 다루기는 정말 힘드네요.

 

Python이었다면 int 변환하고 슬라이싱 간단하게 해서 하는 문제였을건데

 

어려운게 아니라 정말 귀찮고 진빠지는..

 

<< 코드 >> 

#include <string>
#include <vector>
#include <cmath>
#include <map>
using namespace std;
// -48


vector<int> convertDay(string today){

    vector<int> result;
    int year,month,day;
    year = 0;
    month = 0;
    day = 0;

    year += (int(today[0])-48) * 1000;
    year += (int(today[1])-48) * 100;
    year += (int(today[2])-48) * 10;
    year += (int(today[3])-48);

    if(today[5] != '0'){
        month += (int(today[5])-48) * 10;
    }
    month += (int(today[6])-48);

    if(today[8] != '0'){
        day += (int(today[8])-48) * 10;
    }
    day += (int(today[9])-48);

    result.push_back(year);
    result.push_back(month);
    result.push_back(day);
    return result;
}

void calcMonth(vector<int>& input){
    while(1){
        if(input[1] > 12){
            input[0]++;
            input[1] -= 12;
        }
        else{
            break;
        }
    }
}

vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
    vector<int> answer;

    vector<int> todayVec = convertDay(today);

    // 계약, 기간
    map<char, int> termsMap;
    for(auto& t : terms){
        int num = 0;
        int daySize = t.size() - 2;

        for(int i=0; i<daySize; i++){
            num += (int(t[2 + i]) - 48) * pow(10,daySize -1 - i);
        }

        termsMap[t[0]] = num;
        cout << num << endl;
    }

    for(int i = 0; i < privacies.size(); i++){
        vector<int> signDay = convertDay(privacies[i]);
        signDay[1] += termsMap[privacies[i][11]];
        calcMonth(signDay);
        bool isOver = false;
        for(int j = 0; j < 3; j++){
            if(todayVec[j] > signDay[j]){
                isOver = true;
                break;
            }
            else if(todayVec[j] < signDay[j]){
                break;
            }
            else{
                if(j == 2){
                    isOver = true;
                }
            }
        }
        if(isOver){
            answer.push_back(i+1);
        }
    }
    return answer;
}

 

 

 

'C++ > Programmers' 카테고리의 다른 글

[Level2.] 귤 고르기 C++  (0) 2024.02.04
[Level2.] 구명보트 C++  (0) 2024.02.04
[Level2.] 주식가격 C++  (0) 2023.07.12
[Level2.] 올바른 괄호 C++  (0) 2023.07.11
[Level2.] 기능개발 C++  (0) 2023.07.11

관련글 더보기

댓글 영역