[TIL][프로그래머스/Swift] 저주의 숫자 3

Eden·2024년 12월 3일
2

TIL

목록 보기
59/92
post-thumbnail

문제 설명

10진법3x 마을에서 쓰는 숫자10진법3x 마을에서 쓰는 숫자
1168
22710
34811
45914
571016

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

실패한 코드

import Foundation

func solution(_ n: Int) -> Int {
    var arr: [Int] = []
    for i in 1...100 { 
        if i % 3 != 0 {
            arr.append(i)
        }
        arr.filter { !$0.description.contains("3") }
    }
    return arr[n-1]
}

실패 이유

  • arr.filter { !$0.description.contains("3") } 부분에서 필터링 결과를 활용하지 않아서 원래 배열은 수정되지 않았다.
  • 이 문제에서는 조건을 만족할 때까지 반복할 수 있는 while문이 더 적합했다.

무엇을 간과했는지

  • 필터링 결과를 배열에 반영하지 않았음.
  • filter 메서드를 제대로 활용하지 않아 숫자 '3'이 포함된 값을 걸러내지 못했음.

수정 후 코드

import Foundation

func solution(_ n: Int) -> Int {
    var arr: [Int] = []
    var i = 1
    
    while arr.count < n {
        if i % 3 != 0 && !i.description.contains("3") {
            arr.append(i)
        }
        i += 1
    }
    
    return arr[n - 1]
}

문법 정리

  • while문: 조건이 참인 동안 계속 반복 수행한다. 반복 횟수가 미리 정해지지 않았을 때 유용하다!!!! 왜이렇게 손에 안가는지..
  • 배열 필터링: filter 메서드는 배열의 특정 조건을 만족하는 요소들만을 새로운 배열로 반환한다. 필터링된 결과를 기존 배열에 반영하려면 새로운 변수에 할당해야 한다.

배운 점

  • 조건에 맞는 숫자를 찾기 위해 for 대신 while 루프를 사용해 필요할 때까지 반복할 수 있도록 하는 것이 중요했다.
  • filter 메서드를 사용할 때 반환 값을 배열에 반영하거나 새로 할당해야 함을 잊지 말아야 한다.
  • 숫자와 문자열을 다루는 방법과 특정 조건을 만족하는 요소들을 어떻게 필터링할지 더 깊이 이해하게 되었다.
profile
Frontend🌐 and iOS

0개의 댓글