글 작성자: HEROHJK

1. 배열 순회중, 오버플로우 체크

if (0 ..< arr.count).contains(i) {
  arr[i] = 
}

2. N ~ M까지 순회가 필요할 때

(N ... M).forEach { 
  $0
}

3. 나머지가 0인지 아닌지 판별할 때

 

소수 판별이나 비슷한 문제에서, N까지 순회하지 마시고, N / 2 까지만 순회하세요.

N/2를넘어가게되면 나머지값이 0이 나올 수 없습니다.

 

그리고 개인차긴한데, 0혹은 1부터 시작하지말고, 2부터 시작하는게 자신이 생각하는 논리에 조금 더 근접하다고 느껴집니다.

func isPimeNumber(at: Int) -> Bool {
  for number in 2 ... at / 2 {
    if at % number == 0 { return false }
  }
  
  return true
}

 

4. 2개의 배열을 연관지어 처리할 때

zip 함수를 이용합니다.

func mergeArray(arr1: [String], arr2: [String]) -> [String] {
    return zip(arr1, arr2).map { "\($0)\($1)" } // ["A1", "B2", "C3", "D4", "E5"]
}

print(mergeArray(arr1: ["A", "B", "C", "D", "E"], arr2: ["1", "2", "3", "4", "5"]))

5. 배열들을 합칠 때

reduce를 이용합니다.

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(arr.reduce(0, +)) //55

6. 배열의 일부만 이용하고자 할 때

func arraySum(_ arr: [Int], _ left: Int, _ right: Int) -> Int {
  return arr[left ... right].reduce(0, +)
}

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(arraySum(arr, 2, 5)) // 18

 

 

7. 진법 변환

실제로 코테에서 이걸 허락할지는 모르겠는데, 아주 간단하게 변환이 가능합니다.

(연습을 하는 목적이라면 직접 구현하는 코드를 테스트하는 의도이기 때문에 추천하지는 않습니다..)

(2 ... 16).forEach {
    print("\($0)진법:")
    print(String(10, radix: $0))
}
/*
 2진법:
 1010
 3진법:
 101
 4진법:
 22
 5진법:
 20
 6진법:
 14
 7진법:
 13
 8진법:
 12
 9진법:
 11
 10진법:
 10
 11진법:
 a
 12진법:
 a
 13진법:
 a
 14진법:
 a
 15진법:
 a
 16진법:
 a
 */

 

8. 배열을 Stack or Queue 처럼 사용하기.

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// 스택처럼 사용 (후입선출)
if let last = arr.popLast() { // 배열에 인자가 없을 경우 nil 반환
    arr.append(last)
}

// 큐처럼 사용 (선입선출)
let first = arr.removeFirst()
arr.append(first)


/// 하지만 인자가 없을 때 removeFirst를 하면 오버플로우가 발생하므로
/// 코딩테스트에서는 count 체크를, 실제 코딩에서는 extension을 만들어 사용하는것을 추천

if arr.count > 0 {
    let first = arr.removeFirst()
    print(first)
}

extension Array {
    mutating func safeRemoveFirst() -> Element? {
        if self.count > 0 {
            return self.removeFirst()
        } else {
            return nil
        }
    }
}

arr = [1]

if let first = arr.safeRemoveFirst() {
    print(first)
}

 

 

생각나는대로 또 나중에 적어볼께요

반응형