https://school.programmers.co.kr/learn/courses/30/lessons/131128
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
11~15의 테스트케이스가 시간초과가 발생하였다.
//시간초과 발생 코드
class Solution {
fun solution(X: String, Y: String): String {
var answer: String = ""
var x = Array<Int>(10){0}
var y = Array<Int>(10){0}
for(i in 0 until X.length){
x[X[i]-'0']++
}
for(i in 0 until Y.length){
y[Y[i]-'0']++
}
for(i in 9 downTo 0){
for(j in 0 until Math.min(x[i], y[i])){
answer+=('0' + i)
}
}
if(answer == ""){
answer = "-1"
}
if(answer[0] == '0'){
return "0"
}
return answer
}
}
질문 글들을 보니
"String은 변경이 불가능한 자료 구죠 입니다. 우리가 흔히쓰는 문자열 + 문자열은 새로운 문자열을 만드는거지 있는 문자열을 변형시키는게 아닙니다. 시간초과의 원흉이 str += i; 이 부분이 아닐까 싶습니다. 최악의 경우 str이라는 문자열을 300만번 만드는 거다 보니까 이미 있는 값을 변형 시키는 것보다는 새로 만드는게 오래 걸리겠죠. 새로운 저장 공간을 만들고 그 공간에 값을 할당해야 하니까요. 문자열의 값이 자주 변형될 때 사용하는 변수 타입이 따로 있습니다. 그게 뭔지는 직접 찾아보세요"
라는 글이 있었다. 그래서 answer를 String이 아니라 mutableList에 담아 마지막에 String으로 만들어 return 하게 하였다.
참고한 질문글: https://school.programmers.co.kr/questions/53556
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 코드
class Solution {
fun solution(X: String, Y: String): String {
var answer: String = ""
var x = Array<Int>(10){0}
var y = Array<Int>(10){0}
var ansList = mutableListOf<Char>()
for(i in 0 until X.length){
x[X[i]-'0']++
}
for(i in 0 until Y.length){
y[Y[i]-'0']++
}
for(i in 9 downTo 0){
for(j in 0 until Math.min(x[i], y[i])){
ansList.add('0' + i)
}
}
answer = ansList.joinToString("")
if(answer == ""){
answer = "-1"
}
if(answer[0] == '0'){
return "0"
}
return answer
}
}
728x90
'코테 > 코딩테스트 대비 Kotlin' 카테고리의 다른 글
백준 2606 바이러스 Kotlin Dfs (0) | 2023.08.20 |
---|---|
백준 미로탐색 Kotlin Bfs (0) | 2023.08.20 |
Kotlin 조합(Combination) (0) | 2023.08.20 |
Kotlin 두 개의 배열의 요소가 같은지 아는 방법 (0) | 2023.08.19 |
Kotlin 배열 자르기 (0) | 2023.08.19 |