프로그래머스
크기가 작은 부분 문자열
끝까지 처음처럼
2022. 12. 22. 22:04
728x90
class Solution {
fun solution(t: String, p: String): Int {
var answer: Int = 0
var tempString = ""
t.forEach{
tempString += it.toString()
if(tempString.length == p.length){
if(tempString.toLong() <= p.toLong()) answer++
tempString = tempString.slice(1 .. tempString.length-1)
}
}
return answer
}
}
상기 문제는 문제설명을 제대로 확인하지 않으면 런타임 에러가 발생하여 통과하지 못합니다.
문제 설명을 보면 p 의 길이는 최대 18자리 Int의 범위를 벗어나기 때문입니다.
추가-----------------------------------------------------------------------------------------------------------------------------------------------------------
상기 코드로 제출 하였을때 걸린 실행시간 입니다.
테스트 1 〉 | 통과 (33.32ms, 62.7MB) |
테스트 2 〉 | 통과 (46.57ms, 63.2MB) |
테스트 3 〉 | 통과 (33.45ms, 62.8MB) |
테스트 4 〉 | 통과 (37.17ms, 62.9MB) |
테스트 5 〉 | 통과 (53.79ms, 60.6MB) |
테스트 6 〉 | 통과 (47.39ms, 64.7MB) |
테스트 7 〉 | 통과 (49.86ms, 64.1MB) |
테스트 8 〉 | 통과 (44.06ms, 63.2MB) |
테스트 9 〉 | 통과 (34.71ms, 62.8MB) |
테스트 10 〉 | 통과 (33.16ms, 62.4MB) |
테스트 11 〉 | 통과 (33.08ms, 61.5MB) |
테스트 12 〉 | 통과 (45.14ms, 63MB) |
테스트 13 〉 | 통과 (39.21ms, 64.2MB) |
테스트 14 〉 | 통과 (35.05ms, 62.3MB) |
테스트 15 〉 | 통과 (29.00ms, 62.3MB) |
테스트 16 〉 | 통과 (31.39ms, 64.1MB) |
테스트 17 〉 | 통과 (31.09ms, 62.2MB) |
테스트 18 〉 | 통과 (41.55ms, 62.2MB) |
테스트 19 〉 | 통과 (27.47ms, 61.3MB) |
테스트 20 〉 | 통과 (26.62ms, 61.4MB) |
테스트 21 〉 | 통과 (23.22ms, 61.7MB) |
테스트 22 〉 | 통과 (24.53ms, 61.3MB) |
테스트 23 〉 | 통과 (28.04ms, 62.6MB) |
테스트 24 〉 | 통과 (24.40ms, 61.3MB) |
테스트 25 〉 | 통과 (26.03ms, 60.8MB) |
테스트 26 〉 | 통과 (34.71ms, 61MB) |
테스트 27 〉 | 통과 (26.36ms, 62.7MB) |
테스트 28 〉 | 통과 (21.76ms, 60.5MB) |
테스트 29 〉 | 통과 (26.34ms, 61.5MB) |
테스트 30 〉 | 통과 (27.96ms, 63.9MB) |
테스트 31 〉 | 통과 (30.82ms, 61.5MB) |
테스트 32 〉 | 통과 (20.30ms, 61.1MB) |
테스트 33 〉 | 통과 (27.97ms, 63.3MB) |
테스트 34 〉 | 통과 (19.67ms, 62.3MB) |
테스트 35 〉 | 통과 (30.01ms, 62.3MB) |
테스트 36 〉 | 통과 (24.98ms, 63.4MB) |
테스트 37 〉 | 통과 (23.00ms, 63.7MB) |
테스트 38 〉 | 통과 (24.95ms, 63.6MB) |
최근 Deque를 공부중에 해당 문제 또한 Deque를 사용하여 작성 할 수 있을거라고 생각이 들어 풀어봤습니다.
import java.util.ArrayDeque
class Solution {
fun solution(t: String, p: String): Int {
var answer: Int = 0
var deque = ArrayDeque<String>()
t.forEach {
deque.addLast(it.toString())
if(deque.size == p.length){
var temp = ""
deque.forEach{
temp += it
}
if(temp.toLong() <= p.toLong()) answer++
deque.removeFirst()
}
}
return answer
}
}
Deque를 사용하여 풀었을때의 실행시간입니다.
테스트 1 〉 | 통과 (14.05ms, 60.8MB) |
테스트 2 〉 | 통과 (15.70ms, 63.4MB) |
테스트 3 〉 | 통과 (12.44ms, 62MB) |
테스트 4 〉 | 통과 (12.71ms, 62.2MB) |
테스트 5 〉 | 통과 (12.60ms, 61.6MB) |
테스트 6 〉 | 통과 (16.24ms, 60.8MB) |
테스트 7 〉 | 통과 (36.54ms, 68.4MB) |
테스트 8 〉 | 통과 (10.93ms, 62.3MB) |
테스트 9 〉 | 통과 (14.55ms, 60.1MB) |
테스트 10 〉 | 통과 (5.19ms, 59.4MB) |
테스트 11 〉 | 통과 (25.15ms, 61.4MB) |
테스트 12 〉 | 통과 (42.03ms, 67.8MB) |
테스트 13 〉 | 통과 (26.08ms, 62.3MB) |
테스트 14 〉 | 통과 (19.71ms, 62MB) |
테스트 15 〉 | 통과 (21.14ms, 61.4MB) |
테스트 16 〉 | 통과 (15.62ms, 61.2MB) |
테스트 17 〉 | 통과 (24.66ms, 63.3MB) |
테스트 18 〉 | 통과 (19.40ms, 61.2MB) |
테스트 19 〉 | 통과 (8.04ms, 58.9MB) |
테스트 20 〉 | 통과 (9.19ms, 59.7MB) |
테스트 21 〉 | 통과 (2.47ms, 60.8MB) |
테스트 22 〉 | 통과 (8.18ms, 59.2MB) |
테스트 23 〉 | 통과 (9.92ms, 60.6MB) |
테스트 24 〉 | 통과 (2.91ms, 58.6MB) |
테스트 25 〉 | 통과 (4.02ms, 60.9MB) |
테스트 26 〉 | 통과 (3.14ms, 61.2MB) |
테스트 27 〉 | 통과 (5.48ms, 60MB) |
테스트 28 〉 | 통과 (2.87ms, 60.9MB) |
테스트 29 〉 | 통과 (2.81ms, 60.9MB) |
테스트 30 〉 | 통과 (10.34ms, 61.1MB) |
테스트 31 〉 | 통과 (2.42ms, 59.6MB) |
테스트 32 〉 | 통과 (2.83ms, 59.8MB) |
테스트 33 〉 | 통과 (3.81ms, 60.2MB) |
테스트 34 〉 | 통과 (3.82ms, 60.6MB) |
테스트 35 〉 | 통과 (3.89ms, 61.5MB) |
테스트 36 〉 | 통과 (4.28ms, 59.5MB) |
테스트 37 〉 | 통과 (3.91ms, 59.1MB) |
테스트 38 〉 | 통과 (2.64ms, 61.4MB) |
실행시간을 비교하였을때 대략 최소 2배에서 9배까지 차이가 나는 것을 볼 수있습니다.
원인으로는 내부적으로 돌아가는 자료구조에 따른 차이로 알고있습니다.