[Swift] [80일차] 3456_LEET (CONTEST)

·2025년 2월 26일
0

SwiftAlgorithm

목록 보기
84/105
post-thumbnail

3456. Find Special Substring of Length K

콘테스트 437의 1번문제다


문제 설명

  1. substring을 잘 발굴해내는 문제인데, 같은 문자열이 정확히 k번 반복되었을 때를 찾아내는 것이다.
  2. 정답은 Bool타입이라 그냥 판단만 잘 되면 되는 것이었는데, 문제 자체가 이게
  3. aaabaaa일 때 앞에 aaa는 성립이 안된다는 말을 듣고 좀 헷갈렸는데, 결국 뒤에 동일한게 나와서 뒤의 substring s[4...6]이 정답이라고는 하지만, 결국 Bool타입이기도하고, 만약에 뒤에 aaa 대신 aab였으면 오히려 앞에있는 aaa가 맞게되는거라 어처피 Bool타입 판단에 있어서는 전혀 신경써줄 부분이 아니라는 것을 알게되어서 신경쓰지않고 풀이를 진행했다.

문제 풀이

class Solution {
    func hasSpecialSubstring(_ s: String, _ k: Int) -> Bool {
        var stack = 1 // 연속 된 수
        var s = Array(s)
        var now = s.removeFirst()
        for item in s {
            if item == now {
                stack += 1
            }
            else {
                stack = 1
                now = item
            }
            if stack == k {
                break
            }
        }

        return stack == k ? true : false
    }
}

이게 중간에 'cc'만 찾았다고 바로 true를 해버리니까 여기서 좀 에러가 발생했다.

그러면 끝까지보긴 봐야할 것이고, 언제 이것을 끊어줄거냐였는데, 그 부분은 오히려 now랑 다를때, 즉 else를 타버렸을 때 정의해줬다.

 else {
     if stack == k {
		return true
	}
		stack = 1
		now = item
	}

최종 제출 코드

class Solution {
    func hasSpecialSubstring(_ s: String, _ k: Int) -> Bool {
        var stack = 1 // 연속 된 수
        var s = Array(s)
        var now = s.removeFirst()
        for item in s {
            if item == now {
                stack += 1
            }
            else {
                if stack == k {
                    return true
                }
                stack = 1
                now = item
            }
        }

        return stack == k ? true : false
    }
}

타인의 코드

class Solution {
    func hasSpecialSubstring(_ s: String, _ k: Int) -> Bool {
        let s = Array(s)
        var count = 1
        for i in 1..<s.count{
            if s[i] != s[i-1]{
                if count == k{
                    return true
                }
                count = 0
            }
            count += 1
        }
        return (count == k)
    }
}

이미 만들어놓은 코드 구조를 유지하려다 보니, 앞에서 한 글자를 잘라주는 부분에만 신경을 썼고, 결국 1..<s.count로 간단히 처리할 수 있는 것을 굳이 잘라주는 방식으로 구현한 점이 아쉬웠다.

profile
기억보단 기록을

0개의 댓글