2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift]Programmers - 서울에서 김서방 찾기

2024. 2. 29. 10:39ㆍIOS/Swift-Algorithm (Programmers)
SMALL

https://school.programmers.co.kr/learn/courses/30/lessons/12919

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

* 서울에서 김서방 찾기 *

"String" 배열 "seoul" element "Kim" 위치 x 찾아,

"김서방은 x 있다" "String" 반환하는 함수, solution 완성하세요.

"seoul" "Kim" 오직 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

* 제한사항 *

"seoul"은 길이 1 이상, 1000 이하인 배열입니다.

"seoul"의 원소는 길이 1 이상, 20 이하인 문자열입니다.

"Kim" 반드시 seoul 안에 포함되어 있습니다.

 

* 알고리즘 분석과 이해 *

문제를 다시 살펴봅시다.

"seoul"이라는 도시에서 "Kim"이라는 성을 가진 사람의 위치를 찾는 것이죠!?

주어진 조건을 살펴보면,"Kim"은 반드시 주어진 배열 "seoul" 안에 포함되어 있고,

"Kim"은 배열 "seoul" 안에서 오직 한 번만 나타난다고 하네요

 

배열 "seoul"은 길이가 1 이상, 1000 이하이며, 각 요소는 길이가 1 이상, 20 이하인 "문자열(String)"

따라서

이 알고리즘은 "Kim"의 위치를 찾고,

그 위치를 사용하여 결과 문자열을 생성해야 하는 것이죠.

* 로직구상 *

먼저, 배열 "seoul"에서 "Kim"의 인덱스를 찾아야하는데

이때, "firstIndex"(of: "Kim") 함수를 사용합니다.

"Kim"의 인덱스를 찾았을 경우, 해당 인덱스를 사용하여 결과 문자열을 생성해주는데,

예를 들어 "김서방은 1에 있다"와 같은 형태로 문자열을 생성하고

"Kim"이 배열에 없는 경우를 대비하여 guard 문을 사용하여 예외 처리를 하는 것이죠

이렇게 하면 "서울" 도시에서 "Kim" 위치를 찾고, 

 위치를 문자열에 포함하여 반환할 수 있겠습니다.

 

정리

1. solution 함수는 문자열 배열 seoul을 입력으로 받는다.

2. guard 문을 사용하여 배열 seoul에서 "Kim"의 인덱스를 찾는다.

* uard 문을 사용하지 않고 간단히 seoul.firstIndex(of: "Kim")만 사용한다면

"Kim"이 배열에 없는 경우에 대한 처리를 따로 해주어야 합니다.

3. seoul.firstIndex(of: "Kim")를 사용하여 "Kim"의 첫 번째 등장하는 인덱스를 찾고,

이 인덱스를 index에 할당한다.

 

4. "Kim"이 배열에 없는 경우를 대비하여 guard 문을 사용한다.

5. "Kim"이 배열에 없는 경우, 프로그램을 중단하고 에러 메시지를 출력한다.

6. "Kim"의 인덱스를 찾았다면, 해당 인덱스를 사용하여 결과 문자열을 생성한다.

7. 결과 문자열은 "김서방은 x에 있다" 형태로 반환된다.

* 코드구성 *

먼저 solution 함수를 정의 해주어야겠죠?!

func solution(_ seoul: [String]) -> String {

주어진 문제에서 "seoul" 배열에는 사람들의 이름이 들어있는데 이는 각 요소가 문자열인 상태잖아요?!

"Kim"이라는 성을 가진 사람의 이름을 찾고 해당 인덱스를 반환하는 것이 문제의 목표가 되는 것이죠.

따라서

입력과 출력이 문자열에 대한 배열이 아니라 개별 문자열이어야 할 것이고 

주어진 배열에서 "Kim" 찾고 위치를 문자열에 포함하여 반환하는 것이 목적이기 때문에

입력과 출력이 모두 문자열이어야 하죠

 

각각의 배열 요소는 "Kim" 포함할 있는 문자열이며,

결과는 해당 위치를 포함한 문자열이어야 해요.

"seoul"이라는 이름의 "String"(문자열) 배열을 입력으로 받아서

"String"(문자열) 반환해 주면 되겠죠

    guard let index = seoul.firstIndex(of: "Kim") else {

여기서 guard 문을 사용하여 배열 seoul에서 "Kim" 인덱스를 찾습니다. firstIndex(of:) 함수는 배열에서 특정 요소의 번째 인덱스를 반환하며, "Kim" 배열에 없는 경우에는 nil 반환합니다. 따라서, guard let index = seoul.firstIndex(of: "Kim") else { } "Kim" 배열에 없는 경우에 실행됩니다.

        fatalError("Invalid input: 'Kim' not found in the array.")
    }

부분은 에러 처리를 담당합니다. 만약 "Kim" 배열에 없는 경우,

프로그램을 중단하고 "Invalid input: 'Kim' not found in the array."라는 메시지를 출력합니다.

    return "김서방은 \(index)에 있다"
}

위의 조건문에서 "Kim" 배열에 있다는 것이 확인되면,

해당 인덱스를 사용하여 결과 문자열을 생성합니다. 그리고 "김서방은 x 있다"라는 문자열을 반환해줍니다.

여기서 index "Kim" 인덱스를 나타냅니다.

 

전체 코드 구성은 아래와 같아요

func solution(_ seoul: [String]) -> String {
    // "Kim"의 인덱스를 찾기 위해 배열 seoul에서 firstIndex(of:) 함수 사용
    guard let index = seoul.firstIndex(of: "Kim") else {
        // "Kim"이 배열에 없는 경우 예외 처리
        fatalError("Invalid input: 'Kim' not found in the array.")
    }
    // "김서방은 x에 있다" 형태의 문자열 생성 후 반환
    return "김서방은 \(index)에 있다"
}
728x90