1월18일 TIL

이승원·2024년 1월 17일
0

TIL

목록 보기
1/75
post-thumbnail

프로그래머스 코딩테스트 [ 배열의 평균값 ]

Github 코드

  • 정수 배열을 일일이 합해서 count만큼 나누는것 X
let sum = Array.reduce(0,+)
let average = Double(sum) / Double(Array.count)
  • 위 코드처럼 하면 바로 할 수 있음.
  • 단 시간 복잡도는 똑같이 O(N)이기에, 큰 배열을 반복적으로 접근할떄는 결국 알고리즘을 사용해야함.

프로그래머스 코딩테스트 [ 자릿수 더하기 ]

Github 코드

  • 기존에는 정수를 % 10 를 하면서 마지막 자리수를 먼저 구하고 계속 하는 방식으로 진행했음.
  • 이번에는 문자열로 변환 후, String에서 각 Char 추출후 Int로 변환
  • Swift 에서는 문자를 정수로 변환 실패 할 수가 있음. (예: A -> Error)
  • 따라서 if Let 구문을 통해서 언래핑을 해야한다. 즉 오류 방지를 위해 사용함.

프로그래머스 코딩테스트 [ 약수의 합 ]

Github 코드

  • 매번 보는 문제이지만, Brute Force로는 시간복잡도 때문에 안될 가능성이 높음.
  • 제곱근 (SquareRoot) 만큼까지만 계산하는 방식으로 시간복잡도 O(N) -> O(sqrt(N))으로 줄일수 있음.
  • 단 문제는 0 으로 정수가 주어질 경우 예외처리 해야함
    - 나는 if let으로 할 수 있을 줄 알았는데, If let 으로 할 경우는 Optional인 경우에만 가능하다.
let sqrtN = Int(Double(n).squareRoot())
    
    var ans = 0
    
    for i in 1...sqrtN {
        if n % i == 0 {
            ans += i
            
            // 제곱근으로 했기 때문에, 나눠지는 수의 다른 조합을 찾아야한다. 
            if n / i != i {
                ans += (n/i)
                
               
            }
        } 
    }
profile
개발자 (진)

0개의 댓글