코딩테스트

프로그래머스 - 가운데 글자 가져오기 (레벨1, swift)

momo_9 2020. 6. 19. 17:16

문제출처

http://programmers.co.kr/learn/courses/30/lessons/12903

코딩테스트 연습 - 가운데 글자 가져오기

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret

programmers.co.kr

 

문제설명 

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

 

제한사항

 - s는 길이가 1 이상, 100이하인 스트링입니다.

 

입출력 예

sreturn
abcdec
qwerwe

 

 

문제풀이

이 문제는 매우 간단하고 쉽다

swift에서 String의 개별 문자열에 접근하려면 String.indexoffsetBy를 이용해야 한다.

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"가 나오게 될 것이다.

 

프로그래머스에서 문제를 해결하면 다른 사람의 풀이를 볼 수 있는데 아래의 코드는 한 줄로도 짤 수 있다ㅋㅋ 하지만 난 아직 이렇게 밖에 못함ㅠㅠ 더 노력해야지!