안녕하세요. 이번에는 프로그래머스 크기가 작은 부분 문자열 문제를 풀어보려고 합니다.
Problem
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰 것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를 들어 n이 118372면 873211을 리턴하면 됩니다.
[제한 사항]
○ 1 ≤ p의 길이 ≤ 18
○ p의 길이 ≤ t의 길이 ≤ 10,000
○ t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.
Solution
class Solution {
fun solution(t: String, p: String): Int {
var answer: Int = 0
var pLength: Int = p.length
for(i in 0..(t.length - pLength)) {
if(t.substring(i, (i + pLength)).toLong() <= p.toLong()) {
answer++
}
}
return answer
}
}
이번 문제는 for문으로 문제를 풀어보았습니다. p의 길이에 맞춰 substring()을 사용해서 t를 잘라준 후 p의 값과 비교하는 방식으로 문제를 풀어보았습니다. 여기서 주의할 점은 p의 길이가 최대 18자리의 숫자이기 때문에 Int를 사용하면 범위를 초과할 수 있기 때문에 Long을 사용해야 합니다.
1. 다른 사람 코드
class Solution {
fun solution(t: String, p: String): Int {
return (0..t.length - p.length)
.map { t.substring(it until it + p.length) }
.count { it <= p }
}
}
저의 코드와 다르게 한 줄로 코드를 작성한 분이 있어서 공부용으로 첨부해 봅니다. for문을 사용하지 않고 map 함수를 통해서 substring() 해준 후 count함수를 사용해서 t를 자른 값과 p를 비교하였습니다. 가독성면에서 좀 더 나은 코드 같습니다. 앞으로 count 함수도 잘 활용해봐야겠습니다.
Performance
1. 내가 작성한 코드 | 2. 다른 사람 코드 |
반응형
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 피보나치 수 Kotlin (2) | 2023.12.08 |
---|---|
[프로그래머스] 삼총사 Kotlin (0) | 2023.12.07 |
[프로그래머스] 이상한 문자 만들기 Kotlin (4) | 2023.12.05 |
[프로그래머스] 3진법 뒤집기 Kotlin (0) | 2023.12.04 |
[프로그래머스] 이진 변환 반복하기 Kotlin (2) | 2023.12.03 |