본문 바로가기
프로그래머스 Algorithm

[프로그래머스] 크기가 작은 부분 문자열 Kotlin

by Echung 2023. 12. 6.

안녕하세요. 이번에는 프로그래머스 크기가 작은 부분 문자열 문제를 풀어보려고 합니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Problem

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰 것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를 들어 n이 118372면 873211을 리턴하면 됩니다.

 

[제한 사항]

1 ≤ p의 길이 ≤ 18

p의 길이 ≤ t의 길이 ≤ 10,000

t p 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

사진 1. 입출력 예

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. 다른 사람 코드
반응형