ps
99클럽 코테 스터디 3일차 TIL 숫자 문자열과 영단어
nastorond
2024. 7. 24. 15:28
숫자 문자열과 영단어
문제설명
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
- 문자를 대응되는 숫자로 바꿔주기만 하면 되는 간단한 문제였다.
문제풀이
- 이전에 파이썬으로 풀었던 문제지만 string을 c++에서 다루는 게 쉽지만은 않아 한번 더 풀었다.
- 처음에는 Enum 을 활용해 switch-case 문을 활용해보려 했지만, 예외처리 하는 과정에서 번거로워서 그냥 if-else 문으로 처리했다.
- 파이썬에서는 dictionary를 사용해서 풀이 했다.
- 기본적으로 모든 문자를 순회하며 숫자가 아니라면 임시로 저장해줬다. 임시로 저장한 string 의 size 가 3이 되면 대응되는 영단어가 있는지 체크하고 있다면 숫자로 리턴받아 답에 char로 더해줬다.
코드
- 파이썬
answer_sheet = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9'}
def solution(s):
answer = ''
tmp = ''
for i in s:
if i.isdigit():
answer += i
else:
tmp += i
if answer_sheet.get(tmp, 0) != 0:
answer += answer_sheet[tmp]
tmp = ''
return int(answer)
- C++
#include <string>
#include <vector>
#include <cctype>
using namespace std;
int answer_sheet(string s) {
if (s == "zero") return 0;
else if (s == "one") return 1;
else if (s == "two") return 2;
else if (s == "three") return 3;
else if (s == "four") return 4;
else if (s == "five") return 5;
else if (s == "six") return 6;
else if (s == "seven") return 7;
else if (s == "eight") return 8;
else if (s == "nine") return 9;
else return -1;
}
int solution(string s) {
string answer = "";
string tmp="";
for (char c: s) {
if (isdigit(c)) {
answer += c;
continue;
}
tmp += c;
if (tmp.size() > 2) {
int ck = answer_sheet(tmp);
if (ck > -1) {
tmp = "";
answer += '0' + ck;
}
}
}
int res = stoi(answer);
return res;
}
회고
- 저번에 해봤던 문제라 그런건지 쉬워서 그런건지 몰라도 금방 풀었다.
- switch case 조건에 string은 들어갈 수 없다는 걸 알게해준 문제.