티스토리 뷰

반응형

 

 

 

안녕하세요~ iOS Developer, 멍구입니다!!!!!!!!! 😊

오늘은 프로그래머스 입문자들을 위해 "문자열 다루기 기본" 문제에 대한 Swift 풀이를 포스팅하게 되었습니다. 
문자열의 기본적인 처리를 요구하는 문제인데요. 바로 문제 설명 들어가 보겠습니다. 

 

 


프로그래머스 문자열 다루기 기본 문제설명

문제의 요지는 이렇습니다. "주어진 문자열의 길이가 4거나 6이고 + 숫자로만 구성되어있으면 true를, 아니면 false를 리턴해라~!!"

입력으로 주어지는 문자열, s는 길이 1 ~ 8의 문자열로 시간복잡도나 효율성 면에서 떨어질 걱정은 안하셔도 되는 기본문제라고 볼 수 있습니다. 문제 설명은 여기까지입니다. 기초적인 문제라서 더욱 설명할 게 없네요.

바로 스위프트 언어를 통해서 해당 문제를 풀어보도록 하겠습니다. 👨🏻‍💻

 

 

 


프로그래머스 문자열 다루기 Swift 코드 구현

먼저 입력값인 s 문자열을 배열로 만들고 있습니다.... 왜 이러고 있는걸까요??  🤪

사실 해당 문제에서 문자열을 배열화 할 필요는 없습니다. 하지만 String 타입의 문자열의 count 연산은 O(N)라는 점을 상기시켜드리고자 이렇게 구현을 해보았어요.

사실 해당 문제는 count 연산이 단 2번만 필요하기 때문에 상관없지만, String 타입의 count연산은 O(N), 기본 Array타입의 count연산은 O(1)의 시간복잡도를 갖는 다는 점 꼭 유의해주세요!

 

 

1) 첫번째 조건문 분기에서 문자열을 배열화 해서 [Character] 타입을 갖는 strArray 배열을 통해서 count 연산을 수행하고 있어요.
문자열 길이가 4 혹은 6인지 확인합니다. 그렇지 않으면 false를 리턴하지요.

앞서 말했듯이 해당 연산은 String의 count 연산(O(N))이 아닌 Array의 count 연산으로 시간복잡도는 O(1)입니다.

 

2) 두번째 조건문 분기에서 s 문자열이 Int형으로 초기화될 수 있는지를 확인하고 있어요.
만약 숫자로만 구성되어있지 않다면 해당 연산에서 nil을 반환하게 됩니다. 숫자로만 구성되어있다면 nil이 아니겠지요. 만약 nil이 아니라면, 숫자로 구성되어 있는 문자열이므로 true를 반환, nil일 경우에는 false를 반환합니다.

여기에서 심심하니 하나의 실험을 해봤어요.
첫번째 조건문 절에서 strArray.count == 4 || strArray.count == 6을 사용하면 복잡도가 O(1), [4, 6].contains(strArray.count)를 사용하면 O(N)의 복잡도가 될 텐데요. 배열의 비교할 값 갯수가 적으니 둘다 별반 차이 없겠지 하고 결과를 실험해보았습니다.

 

좌측이 전자, 우측이 후자 연산 결과입니다. 자, 이런 접근 차이로도 근소하게 전자가 빠른 모습을 보입니다. 이런 것들이 시간복잡도를 유의하며 풀어야 하는 이유가 되겠죠? 참고 하시기 바래요. 😁

 

 

위의 코드는 한줄로 반환하는 코드 결과입니다. 한줄로 작성했는데 성능도 나쁘지 않네요. ㅎㅎ

여기서 또 하나 참고하실 점은 한줄로 정의된 조건절에서 count를 먼저 비교하느냐, Int 변환여부를 먼저 판단하느냐의 순서 차이에도 현저한 속도차이가 발생할 수 있다는 점!

그러므로 조건문 실행을 할때, 어떻게 분기 순서를 두어야 효율적으로 실행될 수 있을까 고민하시는 것도 좋은 습관이겠네요.

 

 


지금까지 프로그래머스 입문문제, 문자열 다루기 기본 문제를 스위프트(swift)언어를 통해 풀어보았습니다.

시작이 반이라고 하지요?? 이런 기본적인 문제를 푸는데에도 다양한 접근방법과 그로인한 성능차이를 보였습니다. 이런 점들을 하나하나 놓치지 않고 풀어가야, 나중에 진보스(?) 문제를 풀때 더더욱 좋은 결과를 맛보실 수 있을 겁니다. 이 점 꼭 기억하세요. 🤩

그럼, 모두들 즐거운 코딩 되세요~ 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함