https://school.programmers.co.kr/learn/courses/30/lessons/150370
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
<풀이>
1. 현재 날짜, 약관 정보, 개인 정보를 입력받는다.
2. 유효기간이 지난 개인 정보의 번호를 반환한다.
<해법>
1. 날짜 문자열 연산 및 대소비교 방법
=> 위 문제는 "개인정보 수집 날짜 + 유효기간 < 오늘 날짜" 를 물어보는 것입니다. 이제 핵심은 날짜 연산 및 대소비교 입니다. 날짜 문자열을 가장 쉽게 연산과 대소비교를 하는 방법은 모두 정수로 바꿔서 계산하는 것입니다. 위 문제의 경우 모두 일 수로 바꾸면 연산과 대소비교를 빠르게 할 수 있습니다. 코드의 dateStringToInt 함수를 참고해주세요. 날짜나 시간 등등 문자열을 쉽고 빠르게 연산하고 대소비교하는 방법은 정수로 바꾸는 것입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <sstream>
using namespace std;
map<char, int> m;
int dateStringToInt(string str) {
int year = stoi(str.substr(0, 4));
int month = stoi(str.substr(5, 2));
int day = stoi(str.substr(8));
return (28 * 12 * year) + (28 * (month - 1)) + day;
}
int calcDate(int d, int num) {
return d + (28 * num) - 1;
}
vector<int> solution(string today, vector<string> terms, vector<string> privacies) {
vector<int> answer;
int td = dateStringToInt(today);
for (string& t : terms) {
istringstream iss(t);
char cmd;
int num;
iss >> cmd >> num;
m[cmd] = num;
}
for (int i = 0; i < privacies.size(); i++) {
istringstream iss(privacies[i]);
string s;
char cmd;
iss >> s >> cmd;
int d = dateStringToInt(s);
int expired = calcDate(d, m[cmd]);
if (expired < td) answer.push_back(i + 1);
}
return answer;
}
|
문자열에 대해 알아볼 수 있는 문제였습니다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 - 이모티콘 할인행사 (0) | 2023.02.01 |
---|---|
[C++] 프로그래머스 - 택배 배달과 수거하기 (0) | 2023.02.01 |
[C++] 프로그래머스 - 코딩 테스트 공부 (0) | 2022.08.24 |
[C++] 프로그래머스 - 두 큐 합 같게 만들기 (0) | 2022.08.24 |
[C++] 프로그래머스 - 성격 유형 검사하기 (0) | 2022.08.24 |