🕹 Unit Test(유닛 테스트) 🙋 Unit Test(유닛 테스트)란? TDD라는 말을 많이 사용하지만 지금까지 테스트 다운 테스트를 해본 적이 없었습니다. 하지만 이번 프로젝트를 진행하면서 시작부터 테스트를 고려한 프로그래밍을 하려고 했고, 그에 따라 Xcode의 Unit Test에 대해 학습하게 되었습니다. 여기서 말하는 Unit Test란 무엇일까요? "유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다. 즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다." ref: 위키백과 - 유닛테스트 기존에는 코딩을 하며 각 기능이 잘 동작하는지 확인해보기 위해 완성 후 작동시켜보고, 문제가..
🔐 Escaping Clousures Apple의 iOS Dev Tutorial을 진행하다가 @escaping을 처음 알게 되었습니다. 튜토리얼상에서도 간략하게 개념을 소개해주고 있지만 조금 더 자세히 알아보겠습니다! 🧐 Escaping vs Non-escaping 우선 escaping을 이해하기 위해 escaping과 non-escaping의 차이를 알 필요가 있습니다. 이런 고민을 하는 상황의 대표적인 예시로 클로저가 파라미터로 입력되는 메소드를 생각해보겠습니다. func callback(someFunction: () -> Void) { someFunction() } callback { print ("someFunction이 실행되었습니다."》 } // 실행결과: "someFunction이 실행되었습..
📎 간략한 문제 정리 입력된 사용자 목록에서 불량 사용자 목록에 등록된 아이디를 제거합니다. 불량 사용자 목록에 있는 아이디는 정확한 아이디가 아니라 *를 사용한 아이디로 *에는 어떠한 문자가 들어가든 다른 문자가 매칭되면 제거합니다. 이렇게 제거 가능한 아이디 조합의 종류를 찾는 문제입니다. 📈 문제 분석 문제가 어렵지 않아 보이지만 보기보다 난이도가 있는 문제입니다. 계속 가능성을 제외하는 좋은 로직을 생각하는 함정에 빠지면 구현에서 문제가 생깁니다. 한번에 모든 문제를 해결하려는 로직을 구현할 수 있다면 이상적이지만 언제나 완전 탐색의 가능성을 배제하면 안됩니다. 🙋♂️ 내가 처음 생각한 해결 방법 수학적으로 계산하려고 했습니다. 가능성이 있는 모든 경우를 찾아 교집합 부분을 제거하려고 했는데 이..
📎 간략한 문제 정리 전체 배열의 모든 요소를 가진 set이 있을 때, 이 set의 모든 요소를 가진 배열의 부분 배열 중 최소의 길이를 가진 구간을 찾는 문제입니다. 📈 문제 분석 단순히 전체 순회를 하면 속도 이슈가 발생할 수 밖에 없습니다. 범위가 100,000 이므로 O(N^2)이면 바로 속도 이슈가 발생합니다(100번 연산). 아주 단순한 생각으로는 for문을 2차원으로 돌려 i와 j를 정하고, [i:j] 구간에서 모든 요소를 갖는지 검색해보면 되겠지만 이 검색 역시도 cost가 발생하는데다가 검색 자체에서 이미 속도를 넘어서므로 더 효율적인 방법이 필요합니다. 🙋♂️ 내가 처음 생각한 해결 방법 저는 슬라이딩 윈도우를 생각했고, 이 슬라이딩 윈도우의 크기를 이분탐색을 통해 찾는 방식을 생각했..
📎 간략한 문제 정리 기존 사칙연산의 연산자 우선순위가 아니라 임의로 연산자 우선순위를 정해 주어진 expression의 연산을 합니다. 연산 결과의 절대값 중 가장 큰 값을 반환합니다. 📈 문제 분석 이 경우 모든 경우를 탐색하는 Brute-Force(완전 탐색)을 통해 최적의 결과를 찾아냅니다. 🙋♂️ 내가 처음 생각한 해결 방법 기존의 제 풀이는 연산자 우선순위대로 탐색하며 연산을 진행하고, 다음 연산자를 검색하며 다음 연산을 진행하는 방식으로 결과를 찾았습니다. 하지만 공부를 위해 이 문제를 새로 풀며 중위 표기를 후위 표기로 바꾸는 과정에 연산자 우선순위가 있음을 기억했고 그 연산자 우선순위 표만 바꾸는 구조로 작성하면 되므로 중위를 후위로 바꾸는 메소드 한개, 후위 연산을 계산하는 메소드 한..
🕹 UIBarButtonItem Style(바 버튼 아이템 스타일) 🎯 What is Bar Button Style? iOS의 Navigation Bar 위에 버튼을 생성하면서 Bar Button의 스타일을 지정해줄 때 사용합니다. Bar 버튼의 스타일에는 세가지가 있는데 책에서 항상 Bordered를 사용하라는데에서 의구심이 생겼습니다. 다른 옵션으로 변경해줘도 UI에서 변화가 없고, 의미상 Bordered면 테두리 같은 경계선이 있어야 할 것 같은데 없기 때문입니다. 버튼 스타일의 정의는 아래의 Apple 공식 문서를 참고하면 알 수 있습니다. 위의 글을 보면 스타일은 enum으로 구현되어 있습니다. 🙋 What's the difference? plain과 bordered 옵션의 차이를 찾으려..
📎 간략한 문제 정리 손가락을 움직이며 키패드를 누르는데 어떤 손가락으로 누를지를 기록하여 출력하는 문제입니다. 📈 문제 분석 특정한 알고리즘을 사용하는 것이 아니라 문제 조건을 그대로 시뮬레이션 하는 문제입니다. 🙋♂️ 내가 처음 생각한 해결 방법 문제의 조건을 그대로 시뮬레이션하면 되는 문제입니다. 거리를 구하는 방법이 중요한데 이동이 위, 아래, 좌, 우로만 이루어지므로 절대적인 거리(피타고라스의 정리)를 직접 구할 필요 없이 좌로, 우로 이동하는 것만 생각하면 됩니다. 💻 풀이한 코드 def solution(numbers, hand): keypad = {"1": (0, 0), "2": (0, 1), "3": (0, 2), "4": (1, 0), "5": (1, 1), "6": (1, 2), "7..
📱 Functions(함수) vs Computed Property(연산 프로퍼티) 🎯 문제 정의하기 예시를 통해 문제를 정의해보겠습니다. 티켓을 뽑아주는 발권기가 있다고 할 때 발권기는 현재 상태의 티켓 번호를 갖고, 누군가 티켓을 뽑는다면 티켓 번호를 하나 높여 상태를 유지합니다. 이것을 코드로 구현해보면 struct ticketGenerator { var ticketNumber: Int } 로 표현할 수 있습니다. 이제 추가적으로 필요한 것은 발권시 숫자를 하나씩 높여가는 로직입니다. 이것을 메소드로 구현하면 struct ticketGenerator { var ticketNumber: Int func raiseTicketNumber() -> Void { ticketNumber += 1 } } 가 됩니..
- Total
- Today
- Yesterday
- 종이자르기#분할정복#BOJ#Python
- 백준 알고리즘#BackTracking
- 랜선자르기#이분탐색#BOJ#Python
- 날짜 계산#BOJ#완전탐색#Python
- Distinct#Codility#Python
- 토마토#백준알고리즘#Python
- API#lazy#
- filter#isalnum#lower
- 공유기 설치#BOJ#이분탐색#Python
- 암호코드#dp#BOJ#Python
- django
- N으로 표현#DP#Programmers#Python
- 텀 프로젝트#백준알고리즘#Python
- 미로 탐색#백준알고리즘#Python
- 파이썬알고리즘인터뷰#4장
- 병든 나이트#BOJ#탐욕법#Python
- django#slicing
- 리모컨#완전탐색#BOJ#Python
- 순열사이클#BOJ#Python
- 나무자르기#BOJ#이분탐색#Python
- 반복수열#백준알고리즘#Python
- Triangle#Sorting#Codility#Python
- Swift#Tuples#Range
- 섬의개수#백준알고리즘#Python
- NumberofDiscIntersections#Codility#Sort#Python
- PassingCars#Codility#Python
- 배열합치기#분할정복#BOJ#Python
- Brackets#Stacks and Queues#Codility#Python
- 쿼드트리#BOJ#분할정복#Python
- 터틀비치#리콘#xbox#controller
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |