코딩하는 해달이

[level 1 C++] 숫자 문자열과 영단어 본문

개인 공부/프로그래머스

[level 1 C++] 숫자 문자열과 영단어

코딩하는 해달 2022. 8. 22. 18:57

문제 설명

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 1478 → "one4seveneight"
  • 234567 → "23four5six7"
  • 10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

제한 조건

  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

문제 이해

영단어를 전부 숫자로 바꾸면되는 문제입니다.

영단어를 올바르게 쪼개는것을 잘 생각해서 문제를 풀어봅시다.

 

알고리즘

1. 문자열 s를 입력받는다.

2. 문자열의 x번째 문자가 알파벳인지 확인한다.

3. 만약 알파벳이라면 word문자열에 추가한다.

    3-1. word문자열과 열거형의 영단어를 비교한다.

    3-2. 만약 word문자열과 열거형의 영단어가 같다면 그 영단어에 해당하는 숫자를 answer문자열에 추가한다.

    3-3. 그렇지 않다면 2번으로 돌아간다.

4. 그렇지 않다면 answer문자열에 추가한다.

5. answer문자열을 정수형으로 변환한다.

 

풀이코드

#include <string>
#include <vector>

using namespace std;

static const char* Number_str[] = {
	"zero",
	"one",
	"two",
	"three",
	"four",
	"five",
	"six",
	"seven",
	"eight",
	"nine"
};

string getStringForEnum(int num) { //열거형 -> 문자열 변환
	string tmp(Number_str[num]);
	return tmp;
}

int solution(string s) {
	int answer = 0;
	string word = "";
	string numword = "";
	string answers = "";

	for (int i = 0; i < s.length(); i++) {
		if (isalpha(s[i]) > 0) {
			word.push_back(s[i]);
			for (int i = 0; i != 10; i++) {
				if (word == getStringForEnum(i)) {
					string num = to_string(i);
					answers += num;
					word = "";
				}
			}
		}
		else {
			answers.push_back(s[i]);
		}
	}

	answer = stoi(answers);

	return answer;
}

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

 

프로그래머스

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

programmers.co.kr

 

반응형
Comments