오늘은 12,13일차

 

1. 배열 조각하기

  var copyArr: [Int] = arr
  for (i, target) in query.enumerated() {
    guard target < copyArr.count else {return []}
    let subArr =  i % 2 == 0 ? copyArr[...target] : copyArr[target...]
    copyArr = Array<Int>(subArr)
  }
  
  return copyArr

제목처럼 배열 깍아내는 문제

 

2. 리스트자르기

배열 순환문제

  func default_slicer(num_list:[Int], start s: Int, end e: Int, interval term: Int = 1) -> [Int] {
    guard s >= 0, e >= s, e < num_list.count, term < num_list.count else { return [] }
 
    let index_arr = Array(stride(from: s, through: e, by: term))
    return index_arr.map { index in
      num_list[index]
    }
  }
  
  guard slicer.count == 3 else { return [] }
  
  let a: Int = slicer[0], b: Int = slicer[1], c: Int = slicer[2]
  var result: [Int] = []
  
  switch n {
  case 1 : result = default_slicer(num_list: num_list, start: 0, end: b)
  case 2:  result = default_slicer(num_list: num_list, start: a, end: num_list.count - 1)
  case 3:  result = default_slicer(num_list: num_list, start: a, end: b)
  case 4:  result = default_slicer(num_list: num_list, start: a, end: b, interval: c)
  default: return []
  }
  
  return result

엄청 간단한 문제라고 생각했으나 문제를 잘못 생각해서 찾는데 몇 시간 걸린거같다.

아무리 생각해도 잘못된 부분이 없었는데 문제를 잘못 읽고 이해했다.

입력 제한을

  • 0 ≤ a ≤ b ≤ num_list의 길이 - 1

라는걸 a는 시작인덱스 b는 끝인덱스니 b는 항상 a보다 크겠지 라고 이해해버려서 s >= 0, e >s 라고 써버리고 이걸 찾지 못해서 고생많이했다.

입력제한을 따로 체크 하는게 영 귀찮아져서 대충했더니 이런 실수가 발생... 다음 문제부턴 입력제한을 바로 코드위 주석으로 달아두고 작성해야겠다.

아래는 내가 쓴 테스트 코드 공유.

print(solution(4,  [1, 5, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9] ) ==  [2, 4, 6])
print(solution(4, [2, 7, 3], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) == [2, 5])
print(solution(4, [1, 5, 2], [4, 5, 6, 7, 8, 9]) == [5, 7, 9])
print(solution(1, [1, 5, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9]) == [1, 2, 3, 4, 5, 6])
print(solution(2, [0, 1, 1], [10, 8, 6, 4, 2]) == [10, 8, 6, 4, 2])


print(solution(1, [0, 3, 1], [1, 2, 3, 4, 5]) == [1, 2, 3, 4]); // [1, 2, 3, 4]
print(solution(1, [0, 2, 1], [10, 20, 30, 40]) == [10, 20, 30]); // [10, 20, 30]
print(solution(1, [0, 1, 1], [5, 10, 15]) == [5, 10]); // [5, 10]
print(solution(1, [0, 4, 1], [7, 14, 21, 28, 35, 42]) == [7, 14, 21, 28, 35]); // [7, 14, 21, 28, 35]
print(solution(1, [0, 5, 1], [2, 4, 6, 8, 10, 12]) == [2, 4, 6, 8, 10, 12]); // [2, 4, 6, 8, 10, 12]

print(solution(2, [1, 0, 0], [1, 2, 3, 4, 5]) == [2, 3, 4, 5]); // [2, 3, 4, 5]
print(solution(2, [2, 0, 0], [10, 20, 30, 40]) == [30, 40]); // [30, 40]
print(solution(2, [1, 0, 0], [5, 10, 15]) == [10, 15]); // [10, 15]
print(solution(2, [3, 0, 0], [7, 14, 21, 28, 35, 42]) == [28, 35, 42]); // [28, 35, 42]
print(solution(2, [4, 0, 0], [2, 4, 6, 8, 10, 12]) == [10, 12]); // [10, 12]

print(solution(3, [1, 3, 0], [1, 2, 3, 4, 5]) == [2, 3, 4]); // [2, 3, 4]
print(solution(3, [0, 2, 0], [10, 20, 30, 40]) == [10, 20, 30]); // [10, 20, 30]
print(solution(3, [1, 1, 0], [5, 10, 15]) == [10]); // [10]
print(solution(3, [2, 4, 0], [7, 14, 21, 28, 35, 42]) == [21, 28, 35]); // [21, 28, 35]
print(solution(3, [3, 5, 0], [2, 4, 6, 8, 10, 12]) == [8, 10, 12]); // [8, 10, 12]

print(solution(4, [1, 4, 2], [1, 2, 3, 4, 5]) == [2, 4]); // [2, 4]
print(solution(4, [0, 3, 2], [10, 20, 30, 40]) ==  [10, 30]); // [10, 30]
print(solution(4, [0, 2, 1], [5, 10, 15]) ==  [5, 10, 15]); // [5, 10, 15]
print(solution(4, [1, 5, 2], [7, 14, 21, 28, 35, 42]) == [14, 28, 42]); // [14, 28, 42]
print(solution(4, [2, 5, 2], [2, 4, 6, 8, 10, 12]) == [6, 10]); // [6, 10]

따로 입력, 테스트에 대한 함수를 안만들어놔서 적는데 고생좀 했다

이번 기회로 하나 만들어둬야할까? 그건또 귀찮아서 모르겠다

 

3. 왼쪽 오른쪽

배열에서 원소 인덱스 찾기

  //  1 ≤ str_list의 길이 ≤ 20
  //  str_list는 "u", "d", "l", "r" 네 개의 문자열로 이루어져 있습니다.
  guard (1...20) ~= str_list.count else { return ["-1"] }
  let copy_arr = Array(str_list)
  
  let lIndex = str_list.firstIndex { $0 == "l" }
  let rIndex = str_list.firstIndex { $0 == "r" }
  
  // "l"이나 "r"이 없다면 빈 리스트를 return
  guard lIndex != nil || rIndex != nil else { return [] }
  let lValue = lIndex ?? str_list.count
  let rValue = rIndex ?? str_list.count
  
  if lValue < rValue {
    return copy_arr[..<lValue].map { $0 }
  } else if rValue < lValue {
    return copy_arr[(rValue + 1)...].map { $0 }
  }
  return ["error"]

그냥 둘다 찾아서 값 비교해줬다

 

끝!

어제치를 안해서 한주로 안끝나버렸다.

할일없어서 심심하면 진도좀 빼야지

+ Recent posts