전체 글

전체 글

    UITextField를 이용해 비밀번호 입력 칸 만들기

    부스트코스 프로젝트로 회원가입 화면을 만들다가 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 앱 프로그래밍 프로젝트를 진행하면서 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좌표(열)가 작으며 오른쪽 자식은 더 크다. 하나의 열에는 오직 한 개의 노드만 들어갈 수 있고 트리의 가장 왼쪽에있는 노드와 가장 오른쪽에있는 노..

    백준 1774번 : 우주신과의 교감

    https://www.acmicpc.net/problem/1774 1774번: 우주신과의 교감 (1,1) (3,1) (2,3) (4,3) 이렇게 우주신들과 황선자씨의 좌표가 주어졌고 1번하고 4번이 연결되어 있다. 그렇다면 1번하고 2번을 잇는 통로를 만들고 3번하고 4번을 잇는 통로를 만들면 신들과 선자씨끼 www.acmicpc.net 처음 풀어본 최소신장트리(MST) 문제이다. 문제를 요약하자면 N개의 점에 대한 2차원 좌표가 주어지고, 두 점을 잇는데 두 점 사이의 거리만큼 비용이 발생할 때 비용을 최소로 하면서 N개의 점을 모두 연결된 상태(특정한 점에서 다른 점까지 도달할 수 있음)로 만드려고 한다. 그런데 이때 처음부터 이미 이어져있는 점이 있을 수도 있다. 이때 필요한 최소 비용을 구하는 문..

    [IOS] UIImageView의 모서리를 둥글게 만드는 방법

    UIImageView 객체의 layer 프로퍼티를 수정해줌으로써 변경할 수 있다. clipsToBounds 프로퍼티를 true로 변경해야 정상적으로 보여진다. clipsToBounds가 true면 레이어의 바깥으로 벗어난 이미지를 잘라낸다. UIImageView의 contentMode 설정으로 인해 이미지가 객체의 Bounds 보다 커졌을 때도 사용할 수도 있다. let image = UIImageView() self.contentView.addSubview(image) image.backgroundColor = .white image.layer.cornerRadius = 5 image.clipsToBounds = true

    [IOS] PHPhotoLibrary의 requestAuthorizaion 메소드 호출 시 발생할 수 있는 이슈

    개인 프로젝트로 photos 프레임워크를 활용하여 사진 관리 애플리케이션을 만들고 있다가 처음 App이 실행됐을때 사용자에게 공유 사진 라이브러리에 대한 권한을 요청하는 과정에서 예상하지 못한 문제가 발생했다. 그 문제에 대해 다뤄보려고 한다. 나는 사진 라이브러리에서 AssetCollection을 fetch하기 위해, 뷰가 로드될 시(viewDidLoad) 사진 라이브러리에 대한 접근과 변경을 관리하는 PHPhotoLibrary 객체의 authorizationStatus 메소드를 사용해서 현재 라이브러리에 대한 권한 상태를 불러왔다. 만약 아직 권한이 결정되지 않았다면 PHphotoLibrary 객체의 requestAuthorization 메소드를 호출해서 App이 사진 라이브러리에 접근할 수 있도록 ..