안녕하세요. 개발하는 정주입니다.
최근에 프로그래머스의 레벨 1 Swift 문제를 다 풀었는데요.
레벨 1 문제들이지만 배운 점이 많았습니다.
인상 깊었던 문제와 배운 점을 정리하려고 합니다.
목차
가장 어려웠던 문제
레벨 1 문제 중 가장 어려웠던 문제입니다.
[1차] 다트 게임
레벨 1 문제들 중에서 가장 어려웠던 문제는 "다트 게임"입니다.
역시나 문제 출처는 카카오이고 레벨 1 코스프레하는 카카오 딱밤 한 대 때리고 싶었네요.
이번 문제는 split의 활용을 제대로 하지 못해 더욱더 힘들었다고 생각이 드는데요.
꾸역꾸역 스택을 이용해서 문제는 통과했지만 정말 억지스럽게 문제를 풀었습니다.
동시에 split의 활용 방법에 대해 알게 되면서 코드를 상당히 줄일 수 있었던 문제입니다.
어려웠던 만큼 많이 생각해보고 많은 개념을 알 수 있던 문제였습니다.
새로운 기술
새로운 메서드, 개념을 알려준 감사한 문제들입니다.
신규 아이디 추천
"신규 아이디 추천" 문제입니다. 이 문제에서는 7단계에 따라 문자열을 처리해야 했는데요.
이 과정에서 정규식에 대한 것을 배울 수 있었습니다.
아직까지 능숙하진 않지만 연습을 통해 문자열의 고수가 되고 싶네요.
3진법 뒤집기
"3진법 뒤집기" 문제입니다. 이 문제는 진법 변환에 대한 내용이었습니다.
이 문제를 통해 String의 radix라는 기능을 알게 되었습니다.
처음 봤을 때는 정말 쇼킹했는데요. 잊지 말고 다른 문제에서도 적극적으로 활용하고자 합니다.
가운데 글자 가져오기
"가운데 글자 가져오기"는 주어진 String의 가운데 글자를 가져오는 문제였는데요.
Swift에서 String은 C++이나 자바처럼 [index]로 요소를 가져올 수 없다는 것을 배웠습니다.
따라서 알고리즘에서는 Array(String)을 이용해 Character 배열로 변환하는 것이 효율적이라는 것을 알게 되었습니다.
여기서 배운 개념은 여러 문제에서 유용하게 쓸 수 있었습니다. 여유가 될 때 해당 내용에 대해서는 꼭 정리해보고자 합니다.
자연수 뒤집어 배열로 만들기
"자연수 뒤집어 배열로 만들기" 문제는 배열 요소들을 가져와야 했습니다.
이번 문제에서는 compactMap에 대해 알 수 있었습니다.
일반 map을 쓰며 옵셔널 바인딩, 강제 언래핑을 직접 해줬었는데요.
compactMap을 통해 자동으로 해주니 편하고 안전하다는 느낌을 받았습니다.
이후 문제들에서도 compactMap을 적극 활용하여 깔끔한 코드를 작성할 수 있었습니다.
다시 떠오른 개념
문제를 풀면서 잊고 있던 개념을 다시 떠오르게 만들어준 감사한 문제들입니다.
[1차] 비밀 지도
"비밀 지도" 문제는 비트 연산을 이용해야 했던 문제입니다.
문제 해석을 보니 예시에서 2진법으로 계산을 한 것도 비트 연산에 대한 힌트였다고 하는데요.
이것조차 캐치하지 못할 만큼 비트 연산에 대해 잊고 있었습니다.
비트 연산에 대해 다시 알려줘서 감사한 문제 중 하나였습니다.
행렬의 덧셈
"행렬의 덧셈"은 어려운 문제는 아닙니다.
다만, Swift append()의 이점에 대해 다시 한번 상기시켜준 문제였습니다.
배열 요소에 값 대입을 할 때 index에 직접 대입을 하면 크래시가 날 수 있지만 append()는 비교적 안전하다는 점입니다.
이후 여러 문제를 풀거나 개발할 때 잊지 말기 위해 소개드렸습니다.
제일 작은 수 제거하기
"제일 작은 수 제거하기"에서는 다른 특별한 기술을 배운 것은 아닙니다.
문제를 제대로 읽자는 근본적인 생각을 되짚어 준 문제입니다.
예시를 보고 어림짐작하지 말고 문제를 제대로 읽자라고 다시 한번 결심하게 해 준 감사한 문제입니다.
마무리
이렇게 프로그래머스 Lv.1 문제 정복 회고를 마치겠습니다.
Lv.2도 차근차근 제대로 풀어서 코테 합격까지 달려보겠습니다.
감사합니다.