https://school.programmers.co.kr/learn/courses/30/lessons/12903
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* 가운데 글자 가져오기 *
단어 "s"의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
* 제한사항 *
"s"는 길이가 "1" 이상, "100"이하인 string 입니다.
* 알고리즘 분석과 이해 *
이 알고리즘은 주어진 문자열의 가운데 글자나 글자들을 찾아야 합니다.
만약 문자열의 길이가 홀수라면 단 하나의 가운데 글자를 반환하고,
짝수라면 두 개의 가운데 글자를 반환해야 합니다.
가장 간단한 방법은 문자열의 길이를 확인하고,
홀수인 경우 가운데 글자를 반환하고,
짝수인 경우 가운데 두 글자를 반환하는 것입니다.
* 로직구상 *
주어진 문자열의 길이를 확인해야 하니까 문자열의 "count" 프로퍼티의 사용이 필요하고,
문자열의 길이가 홀수인지 짝수인지 확인 해야하니 나머지 연산자 %를 사용 해야하고,
홀수와 짝수는 나머지가 각각 1과 0이 되는 특성을 이용하여 판별할 수 있겠고,
홀수일 경우 가운데 글자를 반환하고, 짝수일 경우 가운데 두 글자를 반환해야하니까
문자열의 인덱스를 계산해야 할 것 같네요.
index(_:offsetBy:) 메서드를 사용하여 가운데 글자나 글자들의 인덱스를 계산할 수 있겠고
해당 인덱스를 사용해서 원하는 부분 문자열을 추출할 수 있게 되는 것이죠.
* 코드구성 *
func solution(_ s: String) -> String {
먼저, 주어진 문자열에서 가운데 글자나 글자들을 반환해 줄수 있도록
함수의 이름은 solution, 입력으로 문자열 s를 받을 수 있도록 함수를 정의해줍니다.
let length = s.count
다음으로 문자열 s의 길이를 구해주어야 해요
문자열의 "count" 프로퍼티를 사용하여
문자열의 길이를 변수 "length"에 저장해 줍시다.
if length % 2 == 0 {
문자열의 길이가 짝수인지 확인하기 위해 나머지 연산자 %를 사용하는데
만약 길이가 짝수이면 조건문이 참이 되어 짝수 길이의 문자열이라고 판별하겠죠?!
let start = s.index(s.startIndex, offsetBy: (length / 2) - 1)
let end = s.index(s.startIndex, offsetBy: (length / 2) + 1)
길이가 짝수인 경우, 가운데 두 글자의 범위를 구해줍니다.
index(_:offsetBy:) 메서드를 사용하여 시작 인덱스와 끝 인덱스를 찾아줍니다.
그리고 중심부의 두 글자를 구하기 위해 (length / 2) - 1와 (length / 2) + 1을 사용해줘요.
return String(s[start..<end])
구한 범위의 부분 문자열을 반환해주고
이를 위해 "String(_:substring) 생성자"를 사용하여
해당 범위의 문자열을 새로운 문자열로 만들어 줍니다.
} else {
만약 문자열의 길이가 홀수라면,
즉, 위의 조건문이 거짓이라면
홀수 길이의 문자열이라고 판별해주도록 해줍니다.
let middleIndex = s.index(s.startIndex, offsetBy: length / 2)
홀수 길이의 문자열에서 가운데 글자를 찾기 위해 가운데 인덱스를 계산하고,
위에서 설명한 방법과 마찬가지로 index(_:offsetBy:) 메서드를 사용해서 가운데 인덱스를 찾아줍시다.
return String(s[middleIndex])
}
}
가운데 인덱스에 해당하는 글자를 반환하고,
이 글자를 새로운 문자열로 만들어 반환 하면서
가운데 글자를 가져와 주며 마무리 됩니다.
* 전체 코드 구성 *
func solution(_ s: String) -> String {
// 문자열의 길이를 구합니다.
let length = s.count
// 문자열의 길이가 홀수인지 짝수인지 확인합니다.
if length % 2 == 0 {
// 짝수인 경우 가운데 두 글자의 범위를 구합니다.
let start = s.index(s.startIndex, offsetBy: (length / 2) - 1)
let end = s.index(s.startIndex, offsetBy: (length / 2) + 1)
// 해당 범위의 문자열을 반환합니다.
return String(s[start..<end])
} else {
// 홀수인 경우 가운데 글자의 인덱스를 구합니다.
let middleIndex = s.index(s.startIndex, offsetBy: length / 2)
// 해당 인덱스의 글자를 반환합니다.
return String(s[middleIndex])
}
}
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 내적 (0) | 2024.03.13 |
---|---|
[Swift] Programmers - 수박수박수박수박수박수? (0) | 2024.03.12 |
[Swift] Programmers - 제일 작은 수 제거하기 (0) | 2024.03.08 |
[Swift] Programmers - 없는 숫자 더하기 (0) | 2024.03.07 |
[Swift] Programmers - 핸드폰 번호 가리기 (0) | 2024.03.06 |