https://school.programmers.co.kr/learn/courses/30/lessons/81301?language=cpp
#include <string>
#include <vector>
#include <iostream>
using namespace std;
static string zero = "zero";
static string one = "one";
static string two = "two";
static string three = "three";
static string four = "four";
static string five = "five";
static string six = "six";
static string seven = "seven";
static string eight = "eight";
static string nine = "nine";
// string_view 를 사용한 이유는 substr 함수에서 새로운 string 복사본을 만들지 않기 위함.
int compare(string_view sv, int& cnt)
{
if (sv.size() >= 4 && sv.substr(0, 4) == zero) {cnt = 4; return 0;}
if (sv.size() >= 3 && sv.substr(0, 3) == one) {cnt = 3; return 1;}
if (sv.size() >= 3 && sv.substr(0, 3) == two) {cnt = 3; return 2;}
if (sv.size() >= 5 && sv.substr(0, 5) == three) {cnt = 5; return 3;}
if (sv.size() >= 4 && sv.substr(0, 4) == four) {cnt = 4; return 4;}
if (sv.size() >= 4 && sv.substr(0, 4) == five) {cnt = 4; return 5;}
if (sv.size() >= 3 && sv.substr(0, 3) == six) {cnt = 3; return 6;}
if (sv.size() >= 5 && sv.substr(0, 5) == seven) {cnt = 5; return 7;}
if (sv.size() >= 5 && sv.substr(0, 5) == eight) {cnt = 5; return 8;}
if (sv.size() >= 4 && sv.substr(0, 4) == nine) {cnt = 4; return 9;}
return 0;
}
int solution(string s) {
int str_size = s.size();
int cur_idx = 0;
int answer = 0;
string_view sv = s;
while(cur_idx < str_size)
{
char cur_char = s[cur_idx];
int cur_num = cur_char - '0';
if (cur_num <= 9)
{
answer = 10 * answer + cur_num;
cur_idx += 1;
}
else
{
int part_cnt = 0, sum_cnt = 0;
int prev_idx = cur_idx;
cur_idx += 1;
// 문자 X 곳 까지 idx 를 증가
while (cur_idx < str_size && sv[cur_idx] - '0' > 9) cur_idx += 1;
// 문자열 추출
string_view part_sv = sv.substr(prev_idx, cur_idx - prev_idx);
sum_cnt = part_sv.size();
while(sum_cnt > 0)
{
int part_num = compare(part_sv, part_cnt);
answer = 10 * answer + part_num;
sum_cnt -= part_cnt;
part_sv = part_sv.substr(part_cnt);
}
}
}
return answer;
}
'CodingTest > 99클럽2024스터디' 카테고리의 다른 글
99클럽 코테 스터디 6일차 TIL, 프로그래머스 / 테이블 해시함수 (0) | 2024.07.28 |
---|---|
99클럽 코테 스터디 5일차 TIL, 프로그래머스 / 베스트 앨범 (0) | 2024.07.27 |
99클럽 코테 스터디 4일차 TIL, 프로그래머스 / 문자열 압축 (0) | 2024.07.25 |
99클럽 코테 스터디 2일차 TIL, 프로그래머스 / 숫자카드 나누기 (0) | 2024.07.24 |
99클럽 코테 스터디 1일차 TIL, 프로그래머스 / 뒤에 있는 큰수 (0) | 2024.07.22 |