어제 기초 트레이닝 문제를 전부 끝내려했으나 하다 결국 질려서 day5,6이 열려버렸다... 

1. 코드 처리하기

주어지는 mode에 따라 글자를 파싱하는 문제

  let copyCode: [String.Element] = Array(code)
  var mode: Int = 0
  var ret: [String.Element] = []
  
  for (idx, char) in copyCode.enumerated() {
    if mode == 0 {
      if char == "1" {
        mode = 1
        continue
      }
      
      if (idx % 2 == 0) {
        ret.append(char)
      }
    } else {
      // mode == 1
      if char == "1" {
        mode = 0
        continue
      }
      if (idx % 2 != 0) {
        ret.append(char)
      }
    }
  }
    
  let result: String = ret.reduce("") { partialResult, char in
    partialResult + String(char)
  }
  if result.isEmpty { return "EMPTY" }
  return result

문제에 적힌 순서대로 그대로 코드로 만들어 썻어니 라인이 길어졌다.... 

줄이면 반은 줄일수 있겠으나 귀찮으니 패스

 

2. 수열과 구간 쿼리 2

범위 필터 연산?

  var result: [Int] = []
  for query in queries {
    guard query.count == 3 else { return [] }
    let s = query[0], e = query[1], k = query[2]
    let filtered = arr[s...e].filter { num in
      num > k
    }
    let find = filtered.min() ?? -1
    result.append(find)
  }
   return result

프로그래머스는 타인의 답을 보는 기능이 있는데 항상 볼때마다 이걸 이렇게나 줄일수있네 라고 놀랍다.

값 체크는 항상 하고싶긴한데 주어진 문제에 일일이 하고있으면 재미가 없고 오래걸려서 그냥 넘기려한다.

그런데도 종종 아무 생각없이 값 검사하는게 추가된다

 

3. 수열과 구간 쿼리 3

배열 순환 스왑 문제

  var copyArr: [Int] = arr
  for query in queries {
    guard query.count == 2 else { return [] }
    let i = query[0], j = query[1]
    guard (0 ..< copyArr.count) ~= i ,  (0 ..< copyArr.count) ~= j else { return [] }
    let temp = copyArr[i]
    copyArr[i] = copyArr[j]
    copyArr[j] = temp
  }
  return copyArr

그냥 적힌 그대로 쭉쭉 코드로 작성했으나 타인 답을 보니  swapAt 라는 함수가 따로 있었다..... 아마 이문제는 swapAt이라는 함수 기능을 사용해보는 문제였겠지싶다

 

 

+ Recent posts