나의 답)
import Foundation
func solution(_ my_string:String, _ overwrite_string:String, _ s:Int) -> String {
let first = my_string.prefix(s)
let second = overwrite_string
let last = my_string.suffix(my_string.count - overwrite_string.count - s)
return first + second + last
}
돌렸는데...
??????
테스트 18번 중에 1개 틀린거면 통과 해주지 ... ㅠ 그마저 시간 초과인데...
설마,, 상수 이름이 길어서 그런가 싶어 이름을 간단하게 a, b, c 로만 바꿔서 다시 돌려봤다.
???? 머세요 ㅜ
나는 처음에 이 문제를 머리론 알겠는데 가슴은 왜 지맘대론지 이해가 될 듯 말 듯 했는데, 딱히 무슨 공식을 이용해야 할 지 생각나지 않았다.
그래서 문제를 그대로 복사해 채찍피티에게 넘기며 답은 알려주지말고 힌트를 달라고 해봤더니 이렇게 답했다.
접두사랑 접미사..? 아 ^^ 먼저 공부를 해야겠다 싶었다. 이렇게 코딩테스트를 풀면서 성장하나보다.
공식문서를 보니 영어라서 번역을 돌려봤다.
접두사(prefix) 는 예시를 보니 이해하기 쉬웠다.
그러니까 prefix(a) 를 쓰면 a 숫자만큼만 출력한다는 것 아니냐
OK
다음 접미사(suffix) 는 예시를 보니 아하! 지정한 숫자만큼 뒤에서 부터 출력을 하는 거구나 !
그렇다면
테스트 문제가 my_string
의 글자에 overwrite_string
을 s
번째부터 시작한다라는 거니까..
예를 들어
my_string.count = 10
overwrite_string = 3
s = 3
계산하면 10 - 3 - 3 = 4
suffix
를 이용해서 my_string
의 마지막 네 문자를 가져오면 될 것 같다.
suffix
메서드는 주어진 길이만큼의 문자열을 my_string
의 끝에서부터 가져오니까 !
let first = my_string.prefix(s)
my_string.prefix(s)
는 my_string
의 시작 부분에서 인덱스 0
부터 s
까지의 문자열을 가져올 것이다.
예를 들어 my_string
이 "abcdefgh"
이고 s
가 3
이라면, first
는 "abc"
가 되는 것.
let second = overwrite_string
이 줄은 overwrite_string
을 그대로 second
변수에 할당하는 것.
let last = my_string.suffix(my_string - overwrite_string - s)
이 코드는 원본 문자열인 my_string
에서 대체할 문자열인 overwrite_string
이 들어간 후 남는 문자열(접미사) 을 가져오는 역할을 한다.
return first + second + last
first, second, last를 결합하여 최종 문자열을 만들어준다..
돌려봤다!!!!!!
어... 뭐가 문제지? 계산은 맞았다.. 내용을 보고 처음엔 뭔 말인지 했는데,
번역기를 돌려보고 구글링해보니 오류 메시지는 my_string
- overwrite_string
- s
와 같이 문자열끼리 빼려고 해서 발생한 것 같았다.
그러고보니 글자 수를 빼는 것이니 count
를 넣어줘야하는데 그저 메서드끼리 빼버리면 되겠지 하고 넘어가니 이런 에러가 발생한 것이었다.
이렇게 코드 실행할 땐 잘 되어서 마지막으로 채점하면 넘어가겠거니~ 하고 채점하기를 눌렀더니 맨 위에 상황이 됐던 것이다.
시간 초과로 인해 틀려버려서 상수를 a, b, c 로 변경 후 채점하니 정답이 되었다...^^
이번 문제를 통해 문자열 조작에 대한 이해가 약간이나마 깊어진 듯 하다. 특히 문자열의 길이를 기반으로 남는 부분을 잘라내는 과정에서 prefix
와 suffix
를 활용한 부분이 기억에 남았다.
실제로 저 메서드들을 언제 사용해볼지는 모르겠지만, 그래도 이번 코딩테스트 문제 경험으로 공식문서도 참고하며 공부하는 과정을 통해 이런 메서드도 있다는걸 알게 된 것만으로도 충분한 공부라고 생각한다.
그리고 처음에는 count
를 제대로 이해하지 못하고 문자열끼리 빼려다 오류가 발생했는데, 이걸 계기로 내가 데이터 타입에 대한 이해가 아직 부족하다는 것을 알게 되었고 이후 코드를 디버깅하면서 문제를 해결할 수 있었다.
이번 문제를 푼 경험 덕분에 앞으로 이런 비슷한 문자열 문제를 만났을 때에는 이번에 배운 prefix
, suffix
를 활용해볼 수 있을 것 같다.
않이외상수이름바꾸기전엔안된거죠이해가안되네