문제 설명

햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재료의 높이는 무시하여 재료가 높이 쌓여서 일이 힘들어지는 경우는 없습니다.

예를 들어, 상수의 앞에 쌓이는 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]일 때, 상수는 여섯 번째 재료가 쌓였을 때, 세 번째 재료부터 여섯 번째 재료를 이용하여 햄버거를 포장하고, 아홉 번째 재료가 쌓였을 때, 두 번째 재료와 일곱 번째 재료부터 아홉 번째 재료를 이용하여 햄버거를 포장합니다. 즉, 2개의 햄버거를 포장하게 됩니다.

상수에게 전해지는 재료의 정보를 나타내는 정수 배열 ingredient가 주어졌을 때, 상수가 포장하는 햄버거의 개수를 return 하도록 solution 함수를 완성하시오.


제한사항
  • 1 ≤ ingredient의 길이 ≤ 1,000,000
  • ingredient의 원소는 1, 2, 3 중 하나의 값이며, 순서대로 빵, 야채, 고기를 의미합니다.

내가 푼 풀이

처음에는 배열을 순회해서 빵(1) 을 만나면 빵부터 index+3 까지 빼서 햄버거가 완성되는지 확인을 했다.

햄버거가 만들어지면 카운트하고 배열에서 뺴고 인덱스를 다시 0부터 시작해서 순회했다.

이 방법으로 시도를 했지만 시간초과가 떴다

배열의 최대 크기가 1,000,000 이고, 햄버거가 만들어지려면 정해진 순서가 있다.

위의 방법은 대충 짐작하면 시간복잡도 O(N^2) 가 걸리고 이보다 더 빠른방법을 이용해야한다.

또한 빵이 아닌 재료들이 지나가도 재사용이 가능하다는 점을 이용해야 해서 스택(Stack)을 이용하려고 한다.

Swift 에서 스택을 구현하려면 직접 코딩을 해야하지만 스택의 FILO만 이용하기로 한다

 

1. 재료배열을 순회해서 스택에 넣는다.

2. 스택의 양이 4 이상이면, 스택의 마지막인덱스로부터 4 범위의 배열을 검사한다.

3. 검사한 배열이 [1,2,3,1] 인 햄버거 만드는조건을 충족하는경우, popLast() ( O(1) ) 를 이용해서 스택에 쌓인 재료를 빼낸다.

4. 만들어진 햄버거 수 출력한다.

 

Swift의 배열은 첫번째 원소를 뺄 땐 배열의 모든 원소를 순회해야하지만, 마지막 원소를 뺄땐 마지막 원소만 접근한다.

이는 배열의 특징인 연속적으로 원소가 존재하기 때문이다.

임의의 위치에 원소를 추가하는 경우, 삽입되는 위치 이후의 원소들을 한칸씩 뒤로 밀어내야 하고

임의의 위치에 원소를 삭제하는 경우, 삭제되는 위치 이후의 원소들을 한칸씩 앞당겨야 하기 때문이다.

최악의 경우 O(N) 만큼 걸린다.

또한 contains 역시 배열 원소 값 하나하나 체크해야하므로 최악의 경우 O(N) 만큼  걸린다.

 

import Foundation

func solution(_ ingredient:[Int]) -> Int {
    var stack = [Int]()
    var result = 0
    var check = [1,2,3,1]
    
    for i in 0..<ingredient.count {      // 재료 순회
        stack.append(ingredient[i])
        if stack.count >= 4 {            // 스택에 재료 4개가 쌓이면
            var arr = [Int]()
            for i in stack.endIndex-4..<stack.endIndex { // 스택에 맨위로부터 4개 추출
                arr.append(stack[i])
            }
            if arr == check {            // 추출한 재료가 햄버거만드는 조건을 충족하는 경우
                result += 1
                for i in 0..<4 {
                    stack.popLast()     //재료 빼기
                }
            }
        }
    }
    return result
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

콜라 문제 Swift  (0) 2023.04.10
옹알이(2) Swift  (0) 2023.04.10
푸드 파이트 대회 Swift  (0) 2023.04.10
과일 장수 Swift  (0) 2023.04.10
기사단원의 무기 Swift  (0) 2023.04.10

문제 설명

수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다. 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다. 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다.

이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다. 또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 선수들이 음식을 더 잘 먹을 수 있게 하려고 합니다. 이번 대회를 위해 수웅이는 음식을 주문했는데, 대회의 조건을 고려하지 않고 음식을 주문하여 몇 개의 음식은 대회에 사용하지 못하게 되었습니다.

예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다.

수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.


제한사항
  • 2 ≤ food의 길이 ≤ 9
  • 1 ≤ food의 각 원소 ≤ 1,000
  • food에는 칼로리가 적은 순서대로 음식의 양이 담겨 있습니다.
  • food[i]는 i번 음식의 수입니다.
  • food[0]은 수웅이가 준비한 물의 양이며, 항상 1입니다.
  • 정답의 길이가 3 이상인 경우만 입력으로 주어집니다.

내가 푼 풀이

준비 한 음식의 양이 2의 배수여야 사용이 가능하다는 점을 이용해서 주어진 음식 배열을 전부 2로 나눈 몫으로 바꾼다.

나눈 배열을 순회하면서 각 인덱스의 양만큼 문자열을 더해 출력하고, 0을 기준으로 반대로 출력한다

 

import Foundation

func solution(_ food:[Int]) -> String {
    var foods = food.map{$0 / 2}
    var str = ""
    for i in 1..<foods.count {
        for j in 0..<foods[i] {
            str = str + "\(i)"
        }
    }
    str = str + "\(0)" + str.map{String($0)}.reversed().joined(separator: "")

    return str
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

옹알이(2) Swift  (0) 2023.04.10
햄버거 만들기 Swift  (0) 2023.04.10
과일 장수 Swift  (0) 2023.04.10
기사단원의 무기 Swift  (0) 2023.04.10
명예의 전당 (1) Swift  (0) 2023.04.10

문제 설명

과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.

  • 한 상자에 사과를 m개씩 담아 포장합니다.
  • 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.

과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)

예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.

  • (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8

사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.

제한사항
  • 3 ≤ k ≤ 9
  • 3 ≤ m ≤ 10
  • 7 ≤ score의 길이 ≤ 1,000,000
    • 1 ≤ score[i] ≤ k
  • 이익이 발생하지 않는 경우에는 0을 return 해주세요.

내가 푼 풀이

등급별 갯수를 저장할 수 있는 Dictionary에 저장한다 [Int: Int]

등급 내림차순으로 높은 등급부터 상자에 최대한 담아서 최대 이익을 계산한다.

이익 계산이 상자에 들어있는 가장 낮은 점수의 곱이라서 내림차순으로 높은 점수부터 넣어야 최대 이익이 나올꺼라 생각했다.

import Foundation

func solution(_ k:Int, _ m:Int, _ score:[Int]) -> Int {
    var result = 0
    var dict = [Int: Int]()
    var good = k
    var count = m
    
    for i in 1...k {
        dict[i] = score.filter{$0 == i}.count
    }
    
    while good > 0 {
        if count > 0 {
            if dict[good]! > 0 {
                var num = count
                if dict[good]! >= count {
                    dict[good]! -= count
                    count = 0
                } else {
                    count -= dict[good]!
                    dict[good]! = 0
                }
            } else {
                good -= 1
            }
        } else {
            result = result + good * m 
            count = m
        }

    }
    return result
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

햄버거 만들기 Swift  (0) 2023.04.10
푸드 파이트 대회 Swift  (0) 2023.04.10
기사단원의 무기 Swift  (0) 2023.04.10
명예의 전당 (1) Swift  (0) 2023.04.10
문자열 나누기 Swift  (0) 2023.04.10

문제 설명

숫자나라 기사단의 각 기사에게는 1번부터 number까지 번호가 지정되어 있습니다. 기사들은 무기점에서 무기를 구매하려고 합니다.

각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 합니다. 단, 이웃나라와의 협약에 의해 공격력의 제한수치를 정하고, 제한수치보다 큰 공격력을 가진 무기를 구매해야 하는 기사는 협약기관에서 정한 공격력을 가지는 무기를 구매해야 합니다.

예를 들어, 15번으로 지정된 기사단원은 15의 약수가 1, 3, 5, 15로 4개 이므로, 공격력이 4인 무기를 구매합니다. 만약, 이웃나라와의 협약으로 정해진 공격력의 제한수치가 3이고 제한수치를 초과한 기사가 사용할 무기의 공격력이 2라면, 15번으로 지정된 기사단원은 무기점에서 공격력이 2인 무기를 구매합니다. 무기를 만들 때, 무기의 공격력 1당 1kg의 철이 필요합니다. 그래서 무기점에서 무기를 모두 만들기 위해 필요한 철의 무게를 미리 계산하려 합니다.

기사단원의 수를 나타내는 정수 number와 이웃나라와 협약으로 정해진 공격력의 제한수치를 나타내는 정수 limit와 제한수치를 초과한 기사가 사용할 무기의 공격력을 나타내는 정수 power가 주어졌을 때, 무기점의 주인이 무기를 모두 만들기 위해 필요한 철의 무게를 return 하는 solution 함수를 완성하시오.


제한사항
  • 1 ≤ number ≤ 100,000
  • 2 ≤ limit ≤ 100
  • 1 ≤ power  limit

내가 푼 풀이

약수의 갯수를 구해서 limit을 초과하면 기본공격력 power 만큼 더하고, 초과하지 않으면 약수의 갯수만큼 더해서 출력한다.

 

이 문제에서 주어지는 number는 100,000 까지 제공한다.

일반적인 약수의 갯수를 구하는방법은 

숫자 n 이 주어졌을때, 1부터 n까지 나누어 떨어지면 약수이고 그 갯수를 구하는것이 일반적인 방법이다

하지만 이 방법은 2중 반복문 안에서 갯수를 구하므로 ( O(n^2) ) 시간초과가 날 경우가 많다.

이 문제 역시 모든 숫자를 순회해서 약수를 구하는 방법을 이용하면 시간초과가 뜬다.

 

그래서 약수를 구하는 더 효율적인 방법을 이용해야한다.

여러가지가 있겠지만 그 중 하나는 범위를 좁히는것이다. 

숫자 n 이 주어졌을때, n의 제곱근까지 확인한다.

이전에 소수를 효율적으로 구하는 과정이랑 비슷한데,

10의 약수 2 는 2 x 5 = 10이지만 10의 약수 5 도 역시 5 x 2 = 10 이다.

갯수는 2개지만 표현식은 앞뒤만 다를뿐 결국 같다는것을 이용하는 것이다

 

그리고 제곱근이 정수로 딱 떨어지는 경우, ex) 100

1 x 100 = 100 

2 x 50 = 100

4 x 25 = 100

5 x 20 = 100

10 x 10 = 100

20 x 5 = 100

25 x 4 = 100

50 x 2 = 100

100 x 1 = 100 

10 x 10 을 기준으로 대칭을 이루고 있다.

정수 n의 제곱근이 정수로 떨어지는 경우 num * num == n 인경우 횟수 증가한다.

이 방법의 시간복잡도는 O(√N) 으로 이전에 쓰는 일반적인 방법보다 시간이 훨씬 단축된다.

 

 

import Foundation

func solution(_ number:Int, _ limit:Int, _ power:Int) -> Int {
    var result = 0
    
    for i in 1...number {
        var num = 1
        var count = 0
        
        while num * num <= i {
            if (num * num) == i {
                count += 1
            } else if i % num == 0 {
                count += 2
            }
            num += 1
        }
        if count > limit {
            result += power
        } else {
            result += count
        }
    }
    return result
}

 

약수의 개수 구하기 알고리즘 참고:

https://chwan.tistory.com/entry/Java-%EC%95%BD%EC%88%98%EC%9D%98-%EA%B0%9C%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

푸드 파이트 대회 Swift  (0) 2023.04.10
과일 장수 Swift  (0) 2023.04.10
명예의 전당 (1) Swift  (0) 2023.04.10
문자열 나누기 Swift  (0) 2023.04.10
가장 가까운 같은 글자 Swift  (0) 2023.04.09

문제 설명

"명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다. 즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다.

이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일 동안 진행된 가수의 점수가 [10, 100, 20, 150, 1, 100, 200]이라면, 명예의 전당에서 발표된 점수는 아래의 그림과 같이 [10, 10, 10, 20, 20, 100, 100]입니다.

명예의 전당 목록의 점수의 개수 k, 1일부터 마지막 날까지 출연한 가수들의 점수인 score가 주어졌을 때, 매일 발표된 명예의 전당의 최하위 점수를 return하는 solution 함수를 완성해주세요.

제한사항
  • 3 ≤ k ≤ 100
  • 7 ≤ score의 길이 ≤ 1,000
    • 0 ≤ score[i] ≤ 2,000

내가 푼 풀이
점수들이 있는 배열을 순회해서 명예의전당의 최솟값을 결과배열에 넣었다.
  • 명예전당이 비어있으면 -> 추가
  • 명예전당이 k보다 적게있으면 -> 점수크기 상관없이 추가 
  • 명예전당이 꽉 차있으면 -> 주어진 점수보다 작은 값이 명예전당에 있다면 순회해서 찾아서 주어진 점수랑 바꾼다 
  • 결과 배열은 명예전당 추가와 상관없이 순회할때 마다 명예전당의 최솟값을 추가

 

 

import Foundation

func solution(_ k:Int, _ score:[Int]) -> [Int] {
    var points = score
    var glory = [Int]()
    var result = [Int]()
    for i in 0..<points.count {
        if glory.isEmpty {
            glory.append(points[i])
            result.append(points[i])
            continue
        }
        if glory.count < k {
            glory.append(points[i])
            result.append(glory.min()!)
        } else if glory.count >= k {
            var point = points[i]
            if glory.filter{ $0 < point}.count > 0 {
                var min = glory.min()!
                for j in 0..<glory.count {
                    if glory[j] == min {
                        glory[j] = point
                        break
                    }
                }
                result.append(glory.min()!)
            } else {
                result.append(glory.min()!)
            }
        }
    }
    return result
}

 

 
 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

과일 장수 Swift  (0) 2023.04.10
기사단원의 무기 Swift  (0) 2023.04.10
문자열 나누기 Swift  (0) 2023.04.10
가장 가까운 같은 글자 Swift  (0) 2023.04.09
크기가 작은 부분문자열 Swift  (0) 2023.04.09

문제 설명

문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.

  • 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
  • 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
  • s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
  • 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.

문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.


제한사항
  • 1 ≤ s의 길이 ≤ 10,000
  • s는 영어 소문자로만 이루어져 있습니다.

내가 푼 풀이

문자열을 배열로만들어서 순회하면서 첫번째 문자의 수와 첫번째 문자가 아닌 수를 비교해서 결과 출력했다.

 

import Foundation

func solution(_ s:String) -> Int {
    var arr = s.map{String($0)}
    var keepArr = [String]()
    var firstStr = ""
    var result = 0

    for i in 0..<arr.count {
        if keepArr.isEmpty {
            firstStr = arr[i]
            keepArr.append(firstStr)
        } else {
            keepArr.append(arr[i])
            if keepArr.filter{$0 == firstStr}.count == keepArr.filter{$0 != firstStr}.count {
                keepArr.removeAll()
                result += 1
            }
        }
        if i == arr.count - 1 {
            if keepArr.count > 0 {
                result += 1
            }
        }
    }

    return result
}

문제 설명

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때,  각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

  • b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
  • n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
  • a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.

따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.

문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.


제한사항
  • 1 ≤ s의 길이 ≤ 10,000
    • s은 영어 소문자로만 이루어져 있습니다.

내가 푼 풀이

1.  주어진 문자열 배열로 변환

2. 문자 배열 순회하면서 Dictionary에 문자와 문자의 인덱스 갱신하면서 result 배열에 추가 (문자 s)

2-1) dict[s] == nil 이면 append(-1) , dict[s] = 현재 인덱스

2-2) dict[s] != nil 이면 append( 현재 인덱스 - dict[s] ) , dict[s] = 현재 인덱스

3. result 배열 출력

 

import Foundation

func solution(_ s:String) -> [Int] {
    var dict = [String: Int]()
    var arr = s.map{String($0)}
    var result = [Int]()
    for i in 0..<arr.count {
        if dict[arr[i]] == nil {
            dict[arr[i]] = i
            result.append(-1)
            continue
        }
        var idx = dict[arr[i]]!
        result.append(i - idx)
        dict[arr[i]] = i
    }
    return result
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

명예의 전당 (1) Swift  (0) 2023.04.10
문자열 나누기 Swift  (0) 2023.04.10
크기가 작은 부분문자열 Swift  (0) 2023.04.09
개인정보 수집 유효기간 Swift  (0) 2023.04.09
둘만의 암호 Swift  (0) 2023.04.09

문제 설명

숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.


제한사항
  • 1 ≤ p의 길이 ≤ 18
  • p의 길이 ≤ t의 길이 ≤ 10,000
  • t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

내가 푼 풀이

1. 문자열 t의 배열을 순회해서 p의 길이만큼 부분 문자열을 뽑아서 배열에 저장한다.

2. 뽑은 배열을 순회하면서 p보다 작거나 같은 문자의 갯수 출력

 

import Foundation

func solution(_ t:String, _ p:String) -> Int {
    var strArr = t.map{String($0)}
    var count = p.count
    var num = Int(p)!
    var numArr = [Int]()
    
    for i in 0..<strArr.count-count + 1 {
        var arr = [String]()
        for j in i..<i+count {
            arr.append(strArr[j])
        }
        numArr.append(Int(arr.joined(separator: ""))!)
    }
    return numArr.filter{ $0 <= num }.count
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

문자열 나누기 Swift  (0) 2023.04.10
가장 가까운 같은 글자 Swift  (0) 2023.04.09
개인정보 수집 유효기간 Swift  (0) 2023.04.09
둘만의 암호 Swift  (0) 2023.04.09
카드 뭉치 Swift  (0) 2023.04.09

+ Recent posts