본문 바로가기

전체 글282

[iOS] UITextFieldDelegate 텍스트 필드 객체의 텍스트 편집 및 유효성 검사를 관리 하는 optional 메서드 집합이다. Overview 텍스트 필드는 중요한 변경 사항에 대한 응답으로 delegate의 메서드를 호출한다. 이러한 방법을 사용하여 사용자가 입력한 텍스트를 확인하고 키보드와의 특정 상호 작용에 응답하며 전체 편집 프로세스를 제어할 수 있다. 텍스트 필드가 첫 번째 응답자(first responder)가 되어 키보드(또는 할당된 input view)를 표시하기 직전에 편집이 시작된다. 편집 프로세스는 다음과 같다 first responder가 되기 전에, 텍스트 필드는 delegate의 textFieldShouldBeginEditing(_:) 메서드를 호출한다. 이 메서드를 사용하여 텍스트 필드의 내용 편집을 허용하거.. 2022. 4. 17.
2573. 빙산 (Python) 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 풀이 빙산의 정보를 icebergs 배열에 (행, 열, 높이)의 형태로 저장해둔다. 그리고 다음 과정을 수행한다. 빙산을 녹이면서 높이가 0이 되는 빙산과 그렇지 않은 빙산을 나누어 저장한다. 그 후 맵에 빙산들의 높이를 업데이트한다. 새로운 빙산 정보에 대하여 bfs를 진행한다. 임의의 빙산을 시작점으로 잡고 bfs를 수행한다. bfs를 수행하면서 만난 빙산의 개수를 카운트한다. 카운트 된 빙산의 개수와 icebergs 배열에 있는 빙산의 개수가 같다면 .. 2022. 4. 17.
2668. 숫자고르기 (Python) 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 풀이 dfs를 통해서 사이클이 존재하는지를 체크해주어 해결할 수 있는 문제다. 먼저 입력을 받으면서 뽑으면 안되는 정수를 걸러준다. 위의 예를 보면 아래 숫자 목록에서 2와 7은 존재하지 않는다. 그렇기 때문에 위의 숫자 목록에서 2와 7은 굳이 dfs를 하지 않아도 일치하는 집합을 만들 수 없음을 알 수 있다. 그 후 차례대로 숫자 1부터 dfs 탐색을 진행한다. 1부터 숫자를 뽑아가며 배열에 저장하고 사이클이 이루어지는지를 확인한다. 예를 들어 .. 2022. 4. 15.
14466. 소가 길을 건너간 이유 6 (Python) 14466번: 소가 길을 건너간 이유 6 첫 줄에 N, K, R이 주어진다. 다음 R줄에는 한 줄에 하나씩 길이 주어진다. 길은 상하좌우로 인접한 두 목초지를 잇고, r c r′ c′의 형태 (행, 열, 행, 열)로 주어진다. 각 수는 1 이상 N 이하이다. www.acmicpc.net 풀이 입력 받은 길은 문자열 형태로 만들어서 딕셔너리를 통해 기록했다. 만약 입력으로 2 2 2 3이 주어졌다면 "2 2 2 3"과 "2 3 2 2"의 형태로 딕셔너리의 키 값을 만들어서 길이 있음을 표시했다. 모든 소에 대하여 bfs 탐색을 진행한다. 이때, (x, y)에서 (nx, ny)로 이동할 때 길이 존재한다면 그쪽으로는 이동하지 않도록 한다. 즉, 길이 없는 곳으로만 이동하여 탐색하고 이때 만났던 소들을 체크한.. 2022. 4. 14.
3190. 뱀 (Python) 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 풀이 뱀의 위치 정보만 잘 기록하면 크게 어려움 없이 해결할 수 있다. 보드에서 뱀의 몸이 있는 위치를 deque을 통해 관리한다. 해당 deque에 있는 위치 정보는 (꼬리의 위치, 몸, 몸, 몸, ......, 머리의 위치)로 되어있다. 뱀이 이동할 때마다 deque의 rear에 머리의 위치를 추가한다. 이렇게 하면 기존 머리의 위치는 몸이 되고 새롭게 rear에 추가된 위치 정보가 머리의 위치가 된다. 뱀이 이동했을 때 사과를 먹지 못했다면 deque의 front.. 2022. 4. 13.
1027. 고층 건물 (Python) 1027번: 고층 건물 세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은 선분으로 나타낸다. i번째 빌딩 (1부터 시작) www.acmicpc.net 풀이 모든 건물에 대하여 왼쪽과 오른쪽으로 볼 수 있는 건물의 수를 카운트하여 가장 많이 보이는 빌딩의 수를 구하면 된다. 기울기(y의 증가량 / x의 증가량)를 이용하여 구할 수 있는데, 이때 왼쪽의 경우는 기울기가 작아져야 볼 수 있는 건물이고 오른쪽의 경우는 기울기가 커져야 볼 수 있는 건물에 해당한다. 위의 예제에서 높이가 7인 건물로 예를 들어보자. 왼쪽에 가장 먼저 건물 2가 있다. 두 건물의 지붕을 잇는 선분의 기울기는 5 (7-2 / 3-2)에 해.. 2022. 4. 12.
1167. 트리의 지름 (Python) 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 www.acmicpc.net 풀이 트리의 지름을 구하려면 임의의 노드에서 가장 멀리 있는 노드 u를 구한다. 그 후 다시 노드 u에서 가장 멀리 있는 노드 v를 구한다. 이렇게 구한 노드 u와 노드 v의 길이가 트리의 지름이 된다. 이에 대한 증명은 링크를 참고하자... 코드 from collections import deque import sys input = sys.stdin.readline # node에서 가장 멀리 떨어져 있는 노드를 구하기 위한 bfs 함수 def .. 2022. 4. 11.
[Algorithm] 위상 정렬 (Topology Sort) 위상 정렬이란? 위상 정렬은 순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘이다. 즉, 방향 그래프의 모든 노드를 '방향성에 거스르지 않도록 순서대로 나열하는 것'이다. 위상 정렬의 예시로는 '선수과목을 고려한 학습 순서 결정'이 있다. 어떤 학부의 커리큘럼 상 'A' 과목을 들어야 'B' 과목을 들을 수 있고 'B' 과목을 들어야 'C' 과목을 들을 수 있다고 가정해보자. 이 경우, 'A' -> 'B' -> 'C'와 같이 표현할 수 있다. 즉, 'C' 과목을 수강하기 위해서는 'A' 과목을 먼저 수강하고 다음으로 'B' 과목을 수강해야 하는 것이다. 위상 정렬을 하기 위한 조건은 다음과 같다. 간선이 방향성을 가진 그래프여야 한다. 그래프 내부에 순환(Cycle)이 .. 2022. 4. 11.
1005. ACM Craft (Python) 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 풀이 건물을 짓는 것에 순서가 존재한다. 즉, 방향성이 존재하는 그래프 형태로 표시할 수 있고 그래프에 사이클이 존재하지 않기 때문에 위상정렬을 이용하여 문제를 해결할 수 있다. 각 건물을 지으며 다음으로 지을 수 있는 건물의 진입 차수를 하나씩 낮추면서 다음 건물의 걸리는 시간을 업데이트 해주면 된다. 이 때, 업데이트 되는 시간은 가장 오래 걸리는 시간으로 해주어야 한다. 예를 들어 문제의 예제를 살펴 보자. 일단 처음에 1번 건물을 지으며 10초가 걸.. 2022. 4. 11.