티스토리 뷰

반응형

 

 

 

안녕하세요 iOS Developer, 멍구입니다. 🤗

요즘들어 많은 기업들이 iOS 직군에 대해서 코딩테스트 진행 시, Swift언어로 사용 언어를 제한하는 경우가 많아지는 추세인데요. 그런만큼, Swift언어로 코딩테스트 준비를 하는 분들이 늘어나고 있는 것 같습니다.

그래서 이참에, 제가 Swift언어로 코딩테스트를 준비해오면서 느꼈던, 입문할때 알아두면 좋은 사항들을 정리해보려고 합니다. 바로 시작해보겠습니다! 🤗

 

 


Swift언어를 지원하는 코딩테스트 플랫폼


프로그래머스

 

Programmers Logo

 

국내 대기업에서 사용하는 코딩테스트 플랫폼은 대부분이 부분적으로 Swift언어를 지원합니다.

그 중 국내 대기업에서 단연 가장 많이 사용되는 플랫폼은 프로그래머스입니다. 프로그래머스는 쿠팡, 네이버, 카카오, 기타 IT대기업 공채에서 가장 많이 활용하는 코딩테스트 플랫폼 중 하나입니다. 국내에서 가장 많이 활용되는 플랫폼인 만큼 대부분의 알고리즘 문제에서 Swift를 지원합니다. 다만, 일부 DP 등의 문제는 Swift을 지원하지 않는 점 참고하시기 바랍니다. 

가장 많이 활용되는 코딩테스트 플랫폼인 만큼, 프로그래머스에서 고득점킷과 1~3단계 문제는 가능한 많이 풀어두시는 것을 추천드립니다.

 

 


해커랭크, 코딜리티, LeetCode

 

HackerRank, Codility page

 

그 다음으로는 코딩테스트 플랫폼, 코딜리티와 해커랭크가 있습니다. 이 두 플랫폼은 해외 플랫폼인데요. 네이버, 카카오 등의 수시채용에 지원 시 코딩테스트 플랫폼으로 보실 수 있습니다.

해커랭크, 코딜리티에서는 프로그래머스 처럼 연습문제를 단계별로 풀 수 있으며, 거대한 커뮤니티도 형성되어 있어 코딩테스트 준비에 좋은 플랫폼이라고 생각합니다. 당연하게도 Swift 언어를 지원합니다. 

LeetCode 또한 해외 플랫폼으로, 커뮤니티도 크고 연습용으로 좋은 다양한 문제들이 많이 있습니다. 또한 대부분의 연습문제가 Swift언어를 지원하고 있으니 활용하시면 좋을 것 같습니다.

 

 


구름(goorm)

 

goorm 로고

 

구름 플랫폼은 국대 소프트웨어 마에스트로 출신 수료생 분께서 만든 코딩테스트 플랫폼인데요.

NHN공채, 토스, 소프트웨어마에스트로, 등에서 해당 플랫폼으로 코딩테스트를 진행한 적이 있습니다.

구름 또한 프로그래머스 처럼 연습문제를 제공하니 참고하시면 좋을 것 같습니다. 프로그래머스 처럼 연습문제에 따라 Swift를 지원하는 경우도, 지원하지 않는 경우도 있습니다.

구름 연습문제는 백준처럼 입력까지 직접 구현해야 하는 경우가 있다는 특징이 있습니다. 

 

 


백준(BOJ)

 

백준 알고리즘 사이트 로고

 

백준 알고리즘 사이트는 사실 코딩테스트만의 목적을 가진 플랫폼은 아니지만, 국내 현존하는 알고리즘 사이트 중 가장 풍부한 문제 리소스를 보유하고 있어 좋은 연습환경을 제공합니다.

프로그래머스의 고득점 킷 문제를 푼 뒤 이와 관련된 문제를 복습삼아 더 풀고 싶을 때, 백준알고리즘 사이트의 분류별 문제를 찾아 풀 수 있습니다. Swift 언어 또한 5.0 이상의 환경을 지원하고 있어 유용합니다. 

다만, Swift언어를 사용하는 사람이 적어선지, 일부 백준 알고리즘 문제에서는 Swift언어에 대한 시간 보정이 되어있지 않는 경우가 종종 있으니 참고하시기 바랍니다.

 

저는 프로그래머스 고득점 킷 > 프로그래머스 2단계까지 풀기 > 프로그래머스 3단계 풀기 > 백준 ~ LeetCode, 해커랭크, 코딜리티를 활용하면서 코딩테스트를 준비했던 기억이 있는데요.

본인의 페이스, 목표에 맞게 위에 상기한 코딩테스트 플랫폼을 골고루 활용하시면 좋을 것 같습니다. 👍🏼

 

 


String 타입 처리에 신경쓴다.

Swift의 문자열을 다룰 때, C++의 문자열과 같은 개념으로 접근하시면 안됩니다.

애초에 기본적으로 String은 일반적인 정수형 인덱스로 첨자접근이 가능한 배열(랜덤 접근 컬렉션)과 다른 구조인 양방향컬렉션으로 되어있습니다.

String.Index 타입으로 첨자접근 시 그 시간 복잡도는 O(N)가 됩니다. 또한 String 타입의 길이를 체크하는 count 프로퍼티의 경우도 그 시간 복잡도는 O(N)이 됩니다.

 

왜 이렇게 되는지는 제가 이전에 작성한 포스팅을 참고바랍니다. ▼

 

Swift String, 문자열의 count보다 isEmpty가 빠른 이유

오늘은 Swift에서 String을 사용할때 주의해야할 점을 알아보겠습니다. swift 언어로 set, string, array 등의 컬렉션 타입이 비었을때를 체크할 때, 많은 사람들이 아래와 같이 사용하곤 합니다.. 아래의

0urtrees.tistory.com


이러한
문자열 처리 상 비효율성을 보완하기 위해 상황에 따라 Array 타입으로 변경(String -> [Chracter] 혹은 [String])해서 첨자접근을 활용할 수 있습니다.

Array타입은 C++와 유사하게 첨자접근이 가능하며, 접근 간 복잡도는 O(1)이기 때문이죠. 특이 문자열 내의 문자 접근이 다수 발생한다면 문자열 처리 방식에 따른 효율성은 크게 차이가 날 수 있습니다. 

String 내에 있는 문자의 타입은 Character라는 점도 참고해서 Character, String의 특성과 기능도 숙지해두는것이 좋습니다.

또한 대다수의 코딩테스트 문제에서 문자열 처리 문제는 빈출대상이기 때문에 더욱 신경쓰는 것이 좋습니다. 

 

 


강제언래핑을 활용한다.

강제언래핑은 스위프트 언어에서 String? 타입과 같은 옵셔널 타입을 강제로 벗겨내어 사용할 때 쓰는 것이죠. 

실무에서는 해당 값이 없을경우(nil) 런타임 에러를 야기하기에 지양하는 문법이지만, 알고리즘 문제에서 보통 입력값은 구체적인 값이 주어지고 그에 따른 결과값을 반환하도록 요구하는 경우가 많습니다.

이런 경우에는 ! 를 통해 강제 언레핑을 해서 코드양을 줄이고, 시간관리를 하는 것이 좋을 수 있습니다. (다 풀고 여유가 된다면 옵셔널 바인딩을 통한 안전한 접근방식을 고려해볼 수도 있겠지만)

 

 


위의 경우, 입력값을 숫자로 변환하는 과정인데요.

문제에서 무조건 숫자가 입력으로 들어온다고 한다면, 강제언래핑을 통해 readLine()으로 반환받는 String? 타입을 -> String 타입으로, String 타입을 -> Int 타입으로 변환하는 작업을 단 한줄로 해결할 수 있습니다. (입력이 더욱 자주 발생한다면 해당 입력을 클로져로 정의해서 재사용할 수도 있습니다.)

예를들면, Swift에서 입력을 받을때 사용하는 readLine()은 String? 타입을 반환하는데요. 이는 입력 받지 않을 경우, nil을 반환하기 때문입니다. 만약 문제에서 무조건 입력이 있음을 보장한다면, let input = readLine()! 과 같이 단 한줄로 입력값을 받을 수 있습니다.

 

readLine()으로 알고리즘 문제 입력받는 방법▼

 

Swift 알고리즘, 공백 유무 별 readLine 입력값 처리방법

안녕하세요 멍구입니다. 🥰 오늘은 간단하게 swift언어로 알고리즘을 풀때 입력을 받아 배열로 변환처리하는 기초적인 방법들을 정리해보겠습니다. 🤩 공백단위의 문자열 입력을 받아 [Int] 배��

0urtrees.tistory.com

 

 


Array, Set, Dictionary + 그 외 자료구조 다루는 연습을 한다.

스위프트의 3대장(?) 자료구조는 Array, Set, Dictionary가 있습니다. 이들에 대한 숙지를 해두는 것은 필수겠죠.

또한 스위프트의 단점이라면, Heap / Stack / Queue 등을 지원하지 않는 다는 점이 있는데요. 이런 부분도 스위프트 언어 상에서 어떻게 대응할 지 고민해두는 것이 좋습니다.

- 가령, Heap은 Swift에서 기본적으로 제공하지 않으므로, 대신 이진탐색을 활용하거나 직접 구현해야 합니다.
- Stack은 배열의 append(), removeLast()를 활용하는 식으로(push/pop) 구현할 수 있습니다.
- Queue는 일반 배열과 커서 값을 활용해서 Queue에 근사한 성능을 유도할 수도 있습니다.

배열큐로 실제 큐와 유사하게 활용하는 예시▼  

 

 

백준 Swift 알고리즘, 감소하는수 1038 큐 문제풀이

안녕하세요. 저는 iOS Developer, 멍구입니다. 🤗 오늘은 백준의 알고리즘 문제, 감소하는 수 1038 문제를 스위프트 언어로 풀어보도록 하겠습니다. 바로 시작하겠습니다! 백준 알고리즘 감소하는수

0urtrees.tistory.com

 

이런 부분을 스위프트 특성에 맞게 준비해 두는 것은 Swift언어로 코딩테스트를 하는 분들에게 필수가 되겠습니다.

 

 


클로져(고차함수), 메서드를 활용한다.

Swift언어는 객체지향 프로그래밍 뿐만 아니라 함수형 프로그래밍을 지향하는 멀티 패러다임 언어입니다.

그런만큼, 다양한 고차함수, 메서드를 지원하며, 이들을 활용하면 보다 직관적이로 간결하게 문제를 풀 수 있습니다. 그러므로, 고차함수의 활용에도 관심을 갖는 것이 좋습니다. 

reversed(), sort(), sorted(), enumerated(), reduce(into:), map(), compactMap(), split(separator:), components(separatedBy:) 등 다양한 고차함수, 메서드들을 자주 접하고, 활용 및 연습하시면 좋습니다.

 

 


Swift 언어 코딩테스트 입문 전 미리 알아두면 좋을 유용한 팁을 정리해봤습니다. 
그 외에 기타 의견이나 질문이 있으면 언제든 댓글 남겨주시면 되겠습니다. 즐거운 하루 되세요! 👩🏻‍💻

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함