[알고리즘] Swift 서울에서 김서방 찾기

이유진·2024년 3월 22일
0

알고리즘

목록 보기
24/32

문제 설명

String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.


제한 사항

  • seoul은 길이 1 이상, 1000 이하인 배열입니다.
  • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
  • "Kim"은 반드시 seoul 안에 포함되어 있습니다.

입출력 예

seoulreturn
["Jane", "Kim"]"김서방은 1에 있다"

풀이 과정

  1. for문을 사용해 배열 seoul 의 element를 순회한다.
  2. element와 index 를 함께 순회하는 enumerated 메서드를 사용한다.
  3. 이 때 순회 대상은 튜플 값으로 나타난다! (index, value)
  4. element 값이 Kim일 경우 “김서방은 (index)에 있다” 로 값을 반환한다.

Solution

func solution(_ seoul:[String]) -> String {
    
    for (index, value) in seoul.enumerated() {
        if value == "Kim" {
            return "김서방은 \(index)에 있다"
        }
    }
    return "0"
}

Another Solution

굳이 순회 하면서 찾지 않아도 되는 간단한 방법이 있었다! 전혀 생각 못함..ㅎㅎ 그래도 알게 되었으니까 정리해보자 ^,,^

index(of:)
배열 내에서 해당 요소가 처음 등장하는 인덱스를 반환한다.

그러니까 index(of: “Kim”) 이렇게 사용하면
배열 내에서 “Kim”이 처음으로 등장하는 위치(index)를 찾을 수 있는 것!!
따라서 아래 코드는 Kim이 처음으로 등장하면 값을 반환하도록 한다.

func solution(_ seoul: [String]) -> String {
    if let index = seoul.index(of: "Kim") {
        return "김서방은 \(index)에 있다"
    }
    else {
        return "0"
    }
}

Additional

위에서 작성한 두 코드는 “Kim” 이 있을 수도 있고, 없을 수도 있는 경우 두 가지 다 반환하고 있다.
Swift에서는 함수가 옵셔널이 아닌 경우에도 모든 경로에서 값을 반환해야 하기 때문!
그렇지 않으면 컴파일러 오류가 발생한다.

하지만 문제 제한 사항에 “Kim”은 반드시 seoul 안에 포함되어 있다고 한다.
그럼 뭔가 다른 방법이 필요하다. 바로 옵셔널 해제 시켜서 바로 반환해 버리기!
옵셔널은 있을 수도 있고, 없을수도 없는 경우를 나타내니까 옵셔널을 해제 해버리면
"Kim"은 배열에 항상 존재한다! 고 생각하면 된다 :> !!

옵셔널 해제 시키는 방법은 다들 아시죠~?
! ’ 만 붙여주면 된다.

(코드도 한 줄로 줄어들어서 괜히 기분도 좋아지고~ 그렇다~🤩👻)

func solution(_ seoul: [String]) -> String {
    return "김서방은 \(seoul.index(of: "Kim")!)에 있다"
}

0개의 댓글