#81301
🎄 Question ?


https://school.programmers.co.kr/learn/courses/30/lessons/81301
class Solution {
fun solution(s: String): Int {
var answer: Int = 0
return answer
}
}
🧩 Thought Process
- 가장 먼저 string에서 string의 일부분(substring을 가져오는 방법을 공부해보았다. 찾아보니 subSequence(startIndex, endIndex) 라는 함수를 사용하여 문자열의 인덱스를 지정하여 substring을 가져오는 방법이 있었다. endIndex는 포함되지 않는다. 이걸 응용해서 문제를 풀어봐야겠다.
- 가장 먼저 s의 character를 정수형으로 바꾸어주고(아스키 코드 응용해서 풀이할거임) 리스트에 넣어주었다.
- while~do문으로 리스트 사이즈 만큼 돌려줌. (size 프로퍼티 사용하기)
- 그 안에 when 문을 람다식을 이용하여 작성해주기.
- 영문으로 적은 숫자가 시작하는 알파벳은 z, o, t, f, s, e, n 총 일곱개이고 이 알파벳에 대응하는 아스키코드로 경우를 나누어주기
- 시작되는 알파벳이 중복되는 경우는 추가적으로 경우 나누어주기
class Solution {
fun solution(s: String): Int {
var answer: List<Int> = 0
var sArray = s.toCharArray()
var i = 0
do {
when(sArray[i]) {
in "z" -> (i += 4
answer.add(0))
in "o" -> (i += 3
answer.add(1))
in "t" -> (
when (sArray[i+1]) {
in "w" -> (i += 3
answer.add(2))
else -> (i += 5
answer.add(3))
})
in "f" -> (
when (sArray[i+1]) {
in "o" -> (i += 4
answer.add(4))
else -> (i += 4
answer.add(5))
})
in "s" -> (
when (sArray[i+1]) {
in "i" -> (i += 3
answer.add(6))
else -> (i += 5
answer.add(7))
})
in "e" -> (i += 5
answer.add(8))
in "n" -> (i += 4
answer.add(9))
else -> (answer.add(sArray[i].digitToInt())
i++
)
}
} while(i < sArray.size)
return answer.toInt()
}
}
엉망이지만 내가 작성해본 코드.
🎀 Answer
package Kakao_Internship_2021.숫자_문자열과_영단어
class Solution {
fun solution(s: String): Int {
val nums = arrayOf("zero", "one", "two", "three", "four", "five", "six", "seven","eight", "nine")
var str = s
for (i in 0 until nums.size) {
str = str.replace(nums[i], i.toString())
}
return str.toInt()
}
}
nums라는 array에 모든 수를 저장하고 저장된 수의 인덱스가 적혀있는 수와 일치함을 이용하였다.
풀이 미쳤다..
풀이 2
fun main(args: Array<String>) {
println(solution("one4seveneight"))
println(solution("23four5six7"))
println(solution("2three45sixseven"))
println(solution("123"))
}
fun solution(s: String): Int {
val dicNumber: HashMap<String, String>
dicNumber = hashMapOf(
"one" to "1",
"two" to "2",
"three" to "3",
"four" to "4",
"five" to "5",
"six" to "6",
"seven" to "7",
"eight" to "8",
"nine" to "9",
"zero" to "0"
)
var answer = ""
var stringNumber: String = ""
for (str in s) {
if (str.isDigit()) answer += str
else {
stringNumber += str
}
if (dicNumber.containsKey(stringNumber)) {
answer += dicNumber[stringNumber]
stringNumber = ""
}
}
return answer.toInt()
}
딕셔너리랑 hashmapof 사용한 코드.
🎁 Result
🏆 Comment
싱기...
'Algorithm > Kotlin' 카테고리의 다른 글
| [프로그래머스 • 코틀린] K번째수 #42748 (0) | 2023.12.01 |
|---|---|
| [프로그래머스 • 코틀린] 문자열 내 마음대로 정렬하기 #12915 (1) | 2023.11.30 |
| [프로그래머스 • 코틀린] 시저 암호 #12926 (0) | 2023.11.28 |
| [프로그래머스 • 코틀린] 최소직사각형 #86491 (1) | 2023.11.27 |
| [프로그래머스 • 코틀린] [유클린드 호제법]최대공약수와 최소공배수 #12940 (0) | 2023.11.20 |