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" |
제한사항
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
풀이 [ 메모리: 16,896kb, 최대 시간: 0.08ms ]
func solution(_ s:String) -> Int {
let voca = ["zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
"five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"]
var temp = ""
var result = ""
for char in s {
// 숫자여부 체크, 문자라면 임시 저장
if Int(String(char)) != nil {
result += String(char)
} else {
temp += String(char)
}
// 합친 문자가 단어장에 있는 단어이면 치환, 임시값 비우기
if voca.keys.contains(temp) {
if let voca = voca[temp] {
result += voca
temp = ""
}
}
}
return Int(result) ?? -1
}
실제 시험이었다면 1번문제로 예상되는? 난이도의 문제였다
나는 문자를 하나씩 받아 합쳐서, 단어를 만드는 방식을 채택했는데
별다른 메서드를 사용하지 않고 단순 로직으로만 구현할수 있다는 점이 장점이라면 장점이다.
메서드를 사용한다면 ReplacingOccurrences(of: ,with:)을 사용할 수 있겠다 싶었는데, 다른 분들은 이 메서드를 많이 사용한 거로 보였다.
다른 풀이 [ 메모리: 16,896kb, 최대 시간: 0.97ms ]
func solution(_ s:String) -> Int {
let voca = ["zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
"five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"]
var result = s
for (key, value) in voca {
result = result.replacingOccurrences(of: key, with: value)
}
return Int(result) ?? -1
}
반응형
'🐣 알고리즘' 카테고리의 다른 글
[프로그래머스] Swift - 이진 변환 반복하기(LV.2) (0) | 2023.05.29 |
---|---|
[프로그래머스] Swift - 최대공약수와 최소공배수(LV.1) (0) | 2023.05.28 |
[프로그래머스] Swift - 소수찾기(Lv.1) (0) | 2023.05.26 |
[프로그래머스] Swift - 소수찾기(Lv.2) (0) | 2023.05.25 |
[프로그래머스] Swift - 프로세스(Lv.2) (0) | 2023.05.24 |
댓글