백준 1967번 : 트리의 지름
·
알고리즘
https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 전형적이진 않지만 조금만 생각하면 풀 수 있는 그래프 탐색 문제이다. N개의 노드로 구성된 트리가 주어지고 간선으로 연결된 두 노드의 번호와 간선의 길이(비용)가 주어진다. 간선의 개수는 N-1개로 일정하다. 이 때 이 트리를 이루는 임의의 두 노드 사이의 거리의 최댓값을 구하는 문제다. 각 노드에 대하여 다른 노드로 가는 비용을 모두 더하여 값을 저장하고 그 값들 중에 최댓인..
[IOS] Notification을 이용하여 여러 클래스에서 데이터 받기
·
IOS
영화 정보 앱을 만드는 부스트코스 프로젝트에서 사용자가 선택한 정렬 기준에 맞게 영화 목록을 갱신하여 보여주는 기능을 구현하려고 했다. 사용자가 선택한 기준으로 정렬된 데이터가 담겨있는 URL에서 데이터를 가져오면 끝나는 일이었지만, 데이터를 요청한 클래스가 아닌 다른 클래스에도 가져온 데이터를 전달하여 동일한 정렬된 데이터로 갱신해야 했다. 이것을 해결한 방법을 간단하게 정리하려고 한다. 데이터를 요청하는 전역 메소드인 requestData 메소드를 살펴보자. func requestData(_ sub: String, _ para: String, _ type: T.Type, _ noti: Notification.Name) { let session = URLSession(configuration: .def..
[IOS] UIModalPresentationStyle의 pageSheet과 formSheet의 차이
·
IOS
두 프레젠테이션 방식이 실제 화면에서 어떻게 다른지 비교하기 위해 간략하게 설명하려고 한다. UIModalPresentationStyle은 뷰 컨트롤러가 modal 방식으로 화면에 보여질 때 어떤 방식으로 보여줄 것인지 설정하는 열거형 객체이다. 자칫하면 UIModalTransitionStyle과 헷갈릴 수 있는데, UIModalTransitionStyle은 해당 뷰 컨트롤러로 화면이 전환될 때 전환 이펙트(수평 접기, 수직으로 올라오기 등)라고 생각하면 된다. MS PowerPoint의 슬라이드 간 전환 애니메이션과 동일하다고 보면 된다. 글에서 다룰 두 가지 외에도 다른 여러가지 스타일들이 있으나, 여기서는 pageSheet과 formSheet만 다뤄보도록 하겠다. ※ UIModalPresentati..
UITextField를 이용해 비밀번호 입력 칸 만들기
·
IOS
부스트코스 프로젝트로 회원가입 화면을 만들다가 UITextField로 패스워드 입력 창을 구현하는데, 키보드로 문자를 입력하면 문자가 보이지 않게 감춰지는 기능을 가진 텍스트 필드를 만들어본다. func addPwTextField() { let textfield: UITextField = UITextField() self.view.addSubview(textfield) textfield.placeholder = "Password" textfield.isSecureTextEntry = true textfield.textContentType = .oneTimeCode } 위 코드에서 눈여겨봐야 할 것은 2가지다. isSecureTextEntry textContentType isSecureTextEntry는 ..
Timer 객체와 RunLoop에 대하여
·
IOS
부스트코스의 IOS 앱 프로그래밍 프로젝트를 진행하면서 Timer객체를 처음 써봤다. 개발자 문서를 봐도 처음엔 이해가 잘 되지 않아서 그냥 간단히 사용법만 알고 넘어갔었는데 부스트코스를 마치고 나서 복습을 하다보니 Timer 객체를 사용하면서 알아야 할게 많은 것 같아 이 글에 간단히 정리해보고자 한다. 음악 플레이어를 만들기 위해 Timer 객체를 사용했었으니, 그 코드 중 일부를 가져와서 분해 및 설명하는 방식이 이해하는데 더 도움이 될 것 같다. 아래 코드는 타이머를 만들고 작동시키는 기능을 하는 메소드이다. func makeAndFireTimer(){ self.timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: {..
백준 2800번 : 괄호 제거
·
알고리즘
https://www.acmicpc.net/problem/2800 2800번: 괄호 제거 첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개 www.acmicpc.net 구현하기도 까다롭고 예외처리도 해줘야해서 개인적으로 어려웠던 문제다. 괄호가 포함된 수식이 입력으로 주어진다. 이 수식에서 괄호를 제거해서 만들 수 있는 모든 서로 다른 수식을 구하려고한다. 단, 괄호는 반드시 한 쌍 이상을 제거해야하며 자신과 맞는 짝이 아닌 괄호끼리는 제거할 수 없다. 문제를 이해하는데는 큰 어려움이 없었고 처음 생각한 해결 아이디어는 이렇다. ..
백준 2812번 : 크게 만들기
·
알고리즘
https://www.acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 아이디어 접근은 쉬우나 구현이 까다로웠던 그리디 문제다. 입력으로 주어지는 N자리 숫자에서 K개 만큼의 수를 제거하여 만들 수 있는 가장 큰 (N-K)자리 수를 구하는 문제다. 처음 생각한 해결 아이디어는 이렇다. N자리 수를 구성하는 숫자들 중 가장 큰 숫자가 만들어야 하는 수의 첫째 자리로 오는 것이 수를 가장 크게 만들 수 있다. 예를들어 주어진 예시 3번에서 10자리 숫자 중 가장 큰 수는 8이지만, 8을 첫째 자리로 만들기 위해선 8 앞의 7개의 숫자를 모두 지워야..
백준 11000번 : 강의실 배정
·
알고리즘
https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 다른 비슷한 문제와 헷갈려서 조금 해맸던 문제이다. 시작시간과 종료시간이 있는 N개의 강의가 입력으로 주어지고, 강의마다 강의실을 배정하려고 한다. 한 강의가 끝나자마자 다른 강의를 시작할 수 있지만, 강의 시간이 겹친다면 그 강의실은 현재 진행중인 강의가 끝날때까지 사용할 수 없다. 강의실을 최소한으로 사용했을때 강의실 개수를 구하는 문제다. 얼핏봤을때 회의실 배정 문제와 비슷해서 N개의 강의를 종료시간 기준으로 오름차순 정렬하고 풀었더니 오..
백준 2141번 : 우체국
·
알고리즘
https://www.acmicpc.net/problem/2141 2141번: 우체국 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 X[1], A[1], X[2], A[2], …, X[N], A[N]이 주어진다. 범위는 |X[i]| ≤ 1,000,000,000, 0 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다. www.acmicpc.net 접근하기 굉장히 까다로웠던 문제. 풀이를 보고나서 이해했다. 일직선 상의 1차원 좌표에 N개의 마을이 있고 각 마을의 위치와 주민의 수가 입력으로 주어진다. 여기에 우체국을 세우려고 하는데, 각 마을에 살고있는 주민들이 우체국을 가기위해 이동해야 하는 거리의 총합이 최소인 위치에 세우려고 한다. 이때 우체국의 위치를..
백준 2250번 : 트리의 높이와 너비
·
알고리즘
https://www.acmicpc.net/problem/2250 2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net 구현이 까다로웠던 그래프 탐색 문제이다. 문제를 요약하자면 트리의 노드들을 2차원 좌표공간에 매칭시키는 문제다. 루트 노드부터 시작해서 자식으로 내려갈때(레벨이 증가할 때) 마다 x좌표(행)가 증가하,고 부모의 왼쪽 자식은 부모보다 y좌표(열)가 작으며 오른쪽 자식은 더 크다. 하나의 열에는 오직 한 개의 노드만 들어갈 수 있고 트리의 가장 왼쪽에있는 노드와 가장 오른쪽에있는 노..