본문 바로가기

분류 전체보기96

[LCA] 백준 13116번 30번 (Swift 풀이) 13116번: 30번 첫 번째 줄에 테스트 케이스의 수 T (1 ≤ T ≤ 50 000)가 주어진다. 이후 T개의 테스트 케이스가 주어진다. 각 테스트 케이스는 한 줄로 구성되어 있으며, 각 줄에는 두 개의 정수 A와 B (1 ≤ A, B ≤ 1 www.acmicpc.net [문제] 혹시 2007학년도 대학수학능력시험 수리영역 가형 이산수학 30번 문제를 아는가? 여러분은 수능을 치는 수험생의 마음으로 이 문제를 해결해야만 한다. 하지만 우리는 저작권 위반으로 판사님을 뵙고 싶지 않았기 때문에 이 문제를 직접 수록할 수는 없었다. 아래 링크 중 하나를 클릭해서 pdf 파일을 내려받아 가장 마지막 페이지를 보면, 위의 그림과 아주 유사한 문제가 하나 있을 것이다. 여러분은 바로 그 문제를 해결해야만 한다... 2021. 4. 21.
CGRect, CGPoint, CGSize CGRect, CGPoint, CGSize는 iOS를 개발할 때 스토리보드를 사용하지 않고 코드로 View를 구현하다보면 자주 접할 수 있는 객체들입니다. 사용하다보니 무슨역할을 하는지는 감으로 알겠고, CGPoint랑 CGSize는 이름만으로도 무슨 객체인지 알 수 있겠는데 CGRect는 말로 설명하라그러면 딱 정의하기가 힘들더라구요?? 그래서 간단하게라도 CGRect가 무슨 객체인지 알아봤는데 정말정말 간단한 객체였습니다ㅋㅋ 그래도 머리로 아는 것과 말로 설명하는 건 또 다르니까 블로깅해볼게요! CGPoint와 CGSize 이름 그대로 CGPoint는 2차원 좌표계의 점을 나타내는 구조체이고, CGSize는 너비와 높이를 나타내는 구조체입니다. 사실 정말 이거 그대로예요. CGPoint는 좌표의 x값.. 2021. 4. 16.
UIResponder 모든 ViewController의 상위클래스는 UIViewController! UIViewController의 핵심적인 상위 클래스는 UIResponder! 네 그래서 이번엔 UIResponder를 공부해보려구요❗️ 먼저 UIViewController가 뭐냐 간단히 말하면, 앱에서 View 계층을 관리하는 객체입니다. ViewController의 주요 역할을 살펴보면 아래와 같습니다. 데이터의 변경에 대한 응답으로 View의 콘텐츠를 업데이트합니다. View들을 통해 유저와 상호작용합니다. View의 사이즈를 정의하고 전체적인 인터페이스 레이아웃을 관리합니다. 앱의 다른 ViewController 같은 다른 뷰 객체들과 상호작용합니다. 이런 UIViewController는 UIResponder 객체로써 .. 2021. 4. 16.
[DP] 백준 2156번 포도주 시식 (Java 풀이) 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net [문제] 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다. 1. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다. 2. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다. 효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해.. 2021. 4. 14.
[DP] 프로그래머스 도둑질 (Java 풀이) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [ 문제 설명 ] 도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다. 각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요. [제한 사항] 이 마을에 있는 집은 3개 이상 1,000,000개 이하입니다. money 배열의 각 원소는 0 이상 1,000 이하.. 2021. 4. 14.
첫 테스트코드를 작성해보다. 제가 처음 테스트코드를 작성해보고 난 후의 개인적인 생각을 정리해보고 싶어서 이렇게 글을 쓰게 되었습니다. 아래 테스트코드의 장점이나 TDD에 대한 내용은 다른 블로그의 내용을 좀 더 참고해서 적었습니다! 이전에 TDD에 대해 알게 된 이후 언젠가는 TDD를 꼭 적용해보고 싶다는 생각이 있었습니다. TDD까지는 아니더라도 최소한 테스트코드는 한 번 작성해봐야지 생각했었어요. 하지만 시간에 쫓긴다는 핑계와 이것 말고도 할 게 많다는 핑계로 계속 미루고 미루고 있었습니다. 저는 최근 스타트업과 iOS 프로젝트 하나를 계약해서 하고있는 중인데, 지금 기획만 어느정도 되어 있는 상태고 디자인과 서버 개발은 아직 들어가지 않은 상태입니다. 서비스를 본격적으로 개발하기 전에 디자인과 서버 개발이 이루어져야 하는 현.. 2021. 4. 14.
메모리 단편화 (Memory Fragmentation) 메모리 단편화가 뭐지? 먼저 컴퓨터를 공부하는 사람이라면 주기억장치에 대해 들어본 적 있죠? 주기억장치는 CPU가 직접 접근하여 처리할 수 있는 고속의 기억장치 (Memory) 로, 현재 수행되는 프로그램과 데이터를 저장하고 있습니다. 종류로는 ROM과 RAM이 있죠. 이 주기억장치에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태를 메모리 단편화가 발생했다고 합니다. 그리고 이 메모리 단편화는 내부 단편화와 외부 단편화로 구분할 수 있습니다. 내부 단편화 (Internal Fragmentation) 메모리를 할당할 때, 프로세스가 필요로 하는 크기보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황을 말합니다. 예를 들어,.. 2021. 4. 14.
메모리 구조에서 Stack과 Queue의 역할 메모리 구조에서 왜 Stack과 Queue가 필요하지? 라고 생각하실 수 있겠지만.. 메모리 구조를 공부하시다보면 스택, 힙, 데이터, 코드 영역이 있는 거 아시죠? 여기서 스택 영역을 우리가 생각하는 Stack 역할로 생각할 수 있고, 힙 영역을 Queue 역할로 생각할 수 있습니다. 여기서 힙과 큐를 혼동하실 수 있는데요, 지금 말하는 의미는 같지만 큐는 자료구조론에서 사용하는 용어이고 힙은 메모리 관련 용어로 사용한다고 생각하면 될 것 같네요! 그리고 이런 스택과 큐의 원리를 메모리 구조에서는 보통 데이터를 처리할 때 데이터를 임시로 저장하거나, 입/출력 장치의 데이터를 일시적으로 저장할 때 사용합니다. 데이터를 잠시 보관해두는 일을 하기 위해 메모리 주소와 인덱스를 일일이 지정하는 일은 너무 복잡.. 2021. 4. 14.
키체인 (Key Chain) 아이폰 유저라면 한 번쯤은 키체인 로그인을 사용해봤을 것 같습니다. 저는 이번 동아리 프로젝트에서, 그리고 스타트업과 계약해서 진행하고 있는 다른 프로젝트에서 자동로그인 기능을 구현해야하는 상황이 생겼는데요! 사실 자동로그인이라길래 처음에는 로그인 후 받은 token을 저장하거나, 아이디와 비밀번호를 UserDefaults로 저장해서 사용하면 되는건가? 하고 생각했는데, 그렇게 하면 거의 뭐 보안이 💩..ㅋㅋㅋ UserDefaults는 데이터를 있는 그대로 저장하기 때문에 개인정보를 UserDefaults로 저장하게 되면 정말 보안이 취약해집니다!!! 그렇다고 개인정보를 직접 암호화해서 저장하기에는 많이 복잡해지죠ㅠㅠ 그래서 키체인을 사용하려합니다 키체인은 암호화된 데이터베이스로써, 사용자의 Mac, 앱.. 2021. 4. 13.
LCA (Lowest Common Ancestor) LCA는 이름에서 알 수 있듯이 두 정점 A와 B에서 가장 가까운 공통된 조상을 찾는 알고리즘입니다. 여기에는 2 가지 방법이 있는데요, 하나씩 조상 노드를 살펴보는 방법과 DP를 사용하는 방법이 있습니다. 트리의 depth를 H라고 할 때, 조상 노드를 하나씩 살펴보는 방법으로는 보통 시간복잡도가 O(H)가 나오지만, 최악의 경우 O(N)이 걸릴 수 있습니다. 하지만 DP를 사용하게 된다면? 보통 O(log H)가 걸리지만, 최악의 경우 O(log N)이 걸립니다. DP를 사용하는게 훨씬 빠르죠? 그래서 노드의 개수가 매우 많고, 검사해야할 노드가 매우 많은 경우에 DP를 사용한 방법을 활용하면 빠르게 답을 찾을 수 있습니다! 먼저, 조상 노드를 하나씩 살펴보는 방법은 사실 간단해요. 두 정점 A와 B.. 2021. 4. 1.
확장 유클리드 호제법 이전에 유클리드 호제법에 대해 알아본 적이 있었습니다. 유클리드 호제법과 확장 유클리드 호제법 모두 정수론을 이용한 알고리즘인데요, 유클리드 호제법이 a와 b의 최대 공약수 gcd(a, b)를 구하는 알고리즘이었다면, 확장 유클리드 호제법은 더 나아가 a와 b의 최대 공약수 gcd(a, b)와 ax+by = gcd(a, b)를 만족하는 x, y까지 구하는 알고리즘 입니다. 그럼 확장 유클리드 호제법을 어떻게 사용하는지 알아보겠습니다. 확장 유클리드 호제법을 사용하기 위해 간단한 규칙을 먼저 살펴봐야 합니다. 아래 규칙을 통해서 Ri가 0이 될 때까지 반복했을 때 마지막으로 나온 Xi, Yi가 gcd(a, b)를 만족하는 x, y가 됩니다. 초기 설정해줘야 하는 값은 X0 = 1, X1 = 0, Y0 = .. 2021. 3. 25.
인덱스 트리 (Indexed Tree) 구간합을 구하는 트리 종류에는 인덱스 트리, 세그먼트 트리, 펜윅 트리가 있습니다. 그 중에서도 오늘은 인덱스 트리(Indexed Tree) 에 대해 알아보려 합니다. 참고로, 인덱스 트리에 포함되어 있는 종류 중 하나가 세그먼트 트리이기 때문에 세그먼트 트리로 풀 수 있는 문제는 인덱스 트리로 모두 풀 수 있습니다. 인덱스 트리는 A라는 수열에서 구간 S ~ E 가 주어졌을 때, A의 구간 S ~ E 사이의 합을 구하기 위해 사용합니다. 중간 중간 A의 값이 하나씩 바뀔 때마다 그 구간의 합을 구할 때 인덱스 트리를 사용할 수 있습니다. 구현 과정을 보면 다소 복잡해 보일 수 있지만, 그래도 천천히 단계를 밟으면 쉽게 이해할 수 있습니다. 저는 Swift로 구현을 해볼건데요, 마지막에 Java 로 구현.. 2021. 3. 24.