728x90
반응형
오늘의 학습 키워드
문자열/해시
과제
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.
숫자 영단어
0 | zero |
1 | one |
2 | two |
3 | three |
4 | four |
5 | five |
6 | six |
7 | seven |
8 | eight |
9 | nine |
풀이 과정
- 입력으로 들어온 문자열의 최대 길이까지 while문으로 반복
- 현재 문자가 isdigit()를 이용하여 숫자인지 확인하고 숫자이면 그대로 answer에 추가
- 아닐 경우 number 딕셔너리의 각 키(key)를 순회
- 현재 위치부터 시작하는 부분 문자열이 해당 단어로 시작하는지 확인 후 단어가 있을 경우 answer에 추가
제출 코드 (python)
def solution(s):
number = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
"five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"}
answer = ""
i = 0
while i < len(s):
if s[i].isdigit():
answer += s[i]
i += 1
continue
found = False
for word in number:
if s[i:].startswith(word):
answer += number[word]
i += len(word)
found = True
break
return int(answer)
다른 언어로 문제 풀기
GO 언어
package main
import (
"strings"
"unicode"
)
func solution(s string) string {
number := map[string]string{
"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
"five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9",
}
var result strings.Builder
for i := 0; i < len(s); {
if unicode.IsDigit(rune(s[i])) {
result.WriteByte(s[i])
i++
continue
}
found := false
for word, num := range number {
if strings.HasPrefix(s[i:], word) {
result.WriteString(num)
i += len(word)
found = true
break
}
}
if !found {
i++
}
}
return result.String()
}
C++
#include <string>
#include <unordered_map>
using namespace std;
string solution(string s) {
unordered_map<string, string> number = {
{"zero", "0"}, {"one", "1"}, {"two", "2"}, {"three", "3"},
{"four", "4"}, {"five", "5"}, {"six", "6"}, {"seven", "7"},
{"eight", "8"}, {"nine", "9"}
};
string result = "";
for(int i = 0; i < s.length();) {
if(isdigit(s[i])) {
result += s[i++];
continue;
}
bool found = false;
for(const auto& pair : number) {
if(s.substr(i, pair.first.length()) == pair.first) {
result += pair.second;
i += pair.first.length();
found = true;
break;
}
}
if(!found) i++;
}
return result;
}
오늘의 회고
- 여러가지 언어를 이용해서 풀어보고, 이해하자!
- isdigit()라는 메서드가 숫자인지 아닌지 판단하는 메서드라는 것을 처음 알았다!
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12916
728x90
'항해 99클럽 코테' 카테고리의 다른 글
99클럽 코테 스터디 6일차 TIL (1) | 2024.11.02 |
---|---|
99클럽 코테 스터디 5일차 TIL (0) | 2024.11.01 |
99클럽 코테 스터디 3일차 TIL (0) | 2024.10.30 |
99클럽 코테 스터디 2일차 TIL (0) | 2024.10.29 |
99클럽 코테 스터디 1일차 TIL (0) | 2024.10.29 |