문제출처
http://programmers.co.kr/learn/courses/30/lessons/12903
문제설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
제한사항
- s는 길이가 1 이상, 100이하인 스트링입니다.
입출력 예
s | return |
abcde | c |
qwer | we |
문제풀이
이 문제는 매우 간단하고 쉽다
swift에서 String의 개별 문자열에 접근하려면 String.index와 offsetBy를 이용해야 한다.
String[Int]이런식으로는 접근할 수 없음(왜애ㅠㅠ)
위 메소드 사용법만 알면 이 문제는 매우 간단하게 해결 할 수 있다. 만약, String[Int]로 접근하고 싶다면 s를 Array로 바꿔주고 사용하면 된다. 하지만 난 String.index를 사용해 보고 싶으니까 요것들을 이용해서 해결 해 보겠다.
1) 먼저 s의 길이를 체크해야 하고,
2) s의 길이가 홀수인 경우엔 1글자, 짝수인 경우엔 2글자가 출력되도록 한다.
이것을 문제에 맞게 solution 함수로 작성하면 아래와 같다.
여기에서는 s[s.index(s.startIndex, offsetBy: middleIdx)] << 요것만 이해하면 된다.
s[String.index] : 문자열 s에서 [] 이 괄호 안에 들어간 index에 해당하는 글자를 의미한다. 배열처럼 내가 직접 숫자를 넣어 지정할 수 없고. String.index를 이용해서 접근해야 한다. 이 String.index에 해당하는 것이 s.index(s.startIndex, offsetBy: middleIdx) 이것이다.
s.index(s.startIndex, offsetBy: middleIdx) : s.startIndex는 s의 첫번째 index이다. offsetBy을 이용하여 startIndex에서 얼마큼 떨어져 있는지를 지정할 수 있다.
따라서
let a = "abcd"
a[a.index(a.startIndex, offsetBy: 1)]
-> 이렇게 입력한다면,
문자열 a의 첫글자로부터 1만큼 떨어져 있는 문자를 의미하게 되고 "b"가 나오게 될 것이다.
프로그래머스에서 문제를 해결하면 다른 사람의 풀이를 볼 수 있는데 아래의 코드는 한 줄로도 짤 수 있다ㅋㅋ 하지만 난 아직 이렇게 밖에 못함ㅠㅠ 더 노력해야지!
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 두 정수 사이의 합 (레벨1, swift) (0) | 2020.06.21 |
---|---|
프로그래머스 - 문자열 다루기 기본 (레벨1, swift) (0) | 2020.06.20 |
프로그래머스 - 나누어 떨어지는 숫자 배열 (레벨1, swift) (0) | 2020.06.13 |
프로그래머스 - 모의고사 (레벨1, swift) (0) | 2020.06.11 |
프로그래머스 - K번째 수(레벨1, swift) (0) | 2020.06.05 |