프로그래머스 코딩테스트 [ 서울에서 김서방 찾기 ]

Github 링크

  • 특정 배열에서 하나의 원소의 Index 찾는 방법
    array.firstIndex(of : target)
  • 배열의 Type이랑 상관없이 다 사용할 수 있음.

프로그래머스 코딩테스트 [ 나우어 떨어지는 숫자 배열 ]

Github 링크

  • 배열에서 조건에 맞는 요소들을 전체를 다 찾아야 하는 경우라면?
    let filteredArray = array.filter {$0 == target}
    let filteredArray2 = array.filter {$0 % 2 == 0} // 짝수만 출력
  • filter { } 는 원하는 조건에 해당하는 요소를 필터링하여 새로운 배열로 반환함.
  • 만약 일치하는 요소가 없으면 빈 배열이 생성되므로 다르게 사용할 수도 있음.
  • 단, 이러한 방법은 결국 for 루프를 통해 전체적인 배열을 접근하는 것과 같은 시간복잡도를 갖고 있다.
  • 코드 가독성 및 유지보수성 측면에서는 더 나을 수는 있지만, 시간복잡도만 생각하면 똑같다.

프로그래머스 코딩테스트 [ 음양 더하기 ]

Github 링크

  • 배열 길이 구하기
    array = [1,2,3,4,5]
    let length = array.count // 5

프로그래머스 코딩테스트 [ 핸드폰 번호 가리기 ]

Github 링크

  • C언어에서는 String이 배열처럼 작동해서 우리가 특정 index를 접근할려고 하면, str[1],str[2] 뭐 이런식으로 접근을 했는데, Swift에서는 String.Index 타입이 존재한다.
    let str "abc"
    let char = str[0] // 에러

    let index = str.index(str.startIndex, offsetBy:0)
    let char = str[index] // "a"
  • 여기서 str.startIndex도 마찬가지로 String.Index 타입이다. 물론 startIndex이니깐 0으로 알 수 있지만, Type을 정확히 알고 사용하는것이 중요하다.

  • str.endIndex도 있는데, endIndex면 str의 endIndex는 2? 아니다. 3이다. 따라서 str[str.endIndex]를 사용하면 Segmentation fault가 뜬다.

  • 그러면 str[str.endIndex-1]은 될까? 아니다.안되기 때문에 str.index() 함수가 있는거다. 마찬가지로 String.Index 타입을 int로 뺼 수 없기 때문이다.

  • 만약에 str에 특정 부분을 바꾸고 싶다면

    str.replaceSubrange(str.startIndex..<endindex,with:String(repeating:"*",count: count-4))
  • 위에 코드를 하나씩 뜯어서 보자. str.replaceSubrange()는 함수 이름을 통해서 . 알수 있듯이 특정 range의 부분을 바꾸는것이다.
    str.replaceSubrange(range,with : string)
  • 따라서 위에 코드는 str.startIndex 부터 endindex 전까지의 범위를 특정 String으로 바꾸는것이다.
    String(repeating:"target", count: count)
  • 이건 말 그대로 반복되는 String을 만드는 방법이다.

프로그래머스 코딩테스트 [ 없는 숫자 더하기 ]

Github 링크

  • 두 배열을 비교하는 방법
    let number = [0,1,2,3,4,5,6,7,8,9]
    let arr = number.filter{!numbers.contains($0)}
  • 주의 해야 할 점은, array.filter은 사이즈가 더 큰걸로 해야함. 아니면 empty arr가 나옴.
  • 그리고 만약에 배열의 합을 구할려고 하는데, 배열이 비어있다면 아래 코드가 에러없이 작동될까?
    let sum = arr.reduce(0,+)
  • 정답은 정상적으로 작동된다. 왜냐하면 arr.reduce(0,+)에서 0이 기본값으로 설정되기 때문이다.

프로그래머스 코딩테스트 [ 가운데 글자 가져오기 ]

Githbu 링크

  • 내가 직접 해결한 방식은 아이디어는 똑같은데 더 좋은 방법이 있다.
  • 두가지가 달랐는데

	// str.index의 새로운 방식
    // offset 말고 before을 사용할 수 있다. 
    let previousIndex = s.index(before: middleIndex)
    
	// String 의 특정 범위를 출력하는 방법. 
    // 마찬가지로 범위 Range를 이용
    // 나는 이걸 몰라서 두 Character를 String으로 typecasting하고 다시 + 로 합혔다. 
    return String(s[previousIndex...middleIndex])
    
    
    
    
    
profile
개발자 (진)

0개의 댓글