본문 바로가기
Algorithm/Programers

영어가 싫어요

by 꼬부기가우는소리 2023. 6. 24.
728x90

 

- 문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/120894

 

프로그래머스

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

programmers.co.kr

 

입력된 문자열에서 숫자에 해당되는 문자열을 숫자로 바꿔주는 문제이다.

문자열을 하나씩 비교하여 숫자로 바꿔주도록 하였다.

 

1) 입력된 문자열의 길이가 0보다 클 동안 수행

2) 첫번째 문자 위치 기준으로 일치하는 숫자 문자열이 있는지 확인

3) 확인된 숫자 문자열을 입력된 문자열에서 제거

4) 확인된 숫자값 저장

 

#include <string>
#include <vector>
using namespace std;

long long solution(string numbers) {
    vector<string> str_numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    
    long long answer = 0;
    while (numbers.length() > 0)
    {
        for (int idx = 0; idx < str_numbers.size(); idx++)
        {
            string str_num = str_numbers.at(idx);
            string str = numbers.substr(0, str_num.length());
            
            if (str == str_num)
            {
                answer = answer * 10 + idx;
                numbers.erase(0, str_num.length());
            }
        }
    }
    return answer;
}

 

하나씩 비교하여 푸는 것이 아닌, find와 replace 함수를 이용해 일치하는 문자열을 치환하여 문제를 풀어줄 수도 있다.

 

1) 숫자 문자열 목록을 첫번째 부터 마지막번째까지 for 문

2) 숫자 문자열과 일치하는 문자열이 있는 시작 index 확인

3) 시작 index 부터 숫자 문자열 사이즈만큼 숫자로 치환

4) 모두 치환 완료된 문자열을 숫자로 변환

 

#include <string>
#include <vector>
using namespace std;

long long solution(string numbers) {
    vector<string> str_numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    
    long long answer = 0;
    int idx;
    for (int i = 0; i < str_numbers.size(); i++)
    {
        while ((idx = numbers.find(str_numbers[i])) != string::npos)
        {
            numbers.replace(idx, str_numbers[i].length(), to_string(i));
        }
    }
    return stoll(numbers);
}

 

 

문자열에서 동일 위치를 찾아서 모두 바꿔주는 걸 한 번에 해주는 regex_replace 함수를 이용해 풀어주는 방법도 있다.

 

#include <string>
#include <vector>
#include <regex>
using namespace std;

long long solution(string numbers) {
    vector<string> str_numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    
    long long answer = 0;
    for (int i = 0; i < str_numbers.size(); i++)
    {
        numbers = regex_replace(numbers, regex(str_numbers[i]), to_string(i));
    }
    return stoll(numbers);
}

 

'Algorithm > Programers' 카테고리의 다른 글

이진수 더하기  (0) 2023.06.24
등수 매기기  (0) 2023.06.24
수 조작하기 1  (0) 2023.06.24
공배수  (0) 2023.06.24
한 번만 등장한 문자  (0) 2023.06.20

댓글