분류 전체보기

    [BOJ] 백준 7569 토마토

    https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 풀이 방법 익은 토마토에 인접한 토마토들은 보관 후 하루가 지나면 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향으로 익게 된다. 앞, 뒤라는 조건이 있기 때문에 3차원 배열을 이용한다. 3차원 배열에 대해서 간단히 설명하자면, int [][][] = new int [x][y][z] xyz는 일반적으로 x는 y와 z의 배열을 가진 면, y는 배열에서 열(Row), z는 배열..

    [BOJ] 백준 2644 촌수계산

    [BOJ] 백준 2644 촌수계산

    https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1≤n≤100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진 www.acmicpc.net 풀이 방법 예제로 나온 그래프를 그리면 이런 형태가 되는데, 시작점을 7로 잡고 끝점을 3으로 잡으면 이러한 방향 그래프가 나온다. 정점 1번을 보면 들어오는 경우가 있고, 나가는 경우가 있으니 이것은 양방향 인접 리스트를 이용해서 풀 수 있다는 것을 알 수 있다. dfs를 사용해서 시작점을 계속 바꿔주고, 시작점이 바뀔 때마다 count를 한다. 시작점과 끝점이 같아지는 경우에 c..

    [BOJ] 백준 14502 연구소

    https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 풀이 방법 벽을 3개를 세울 수가 있는데 어디에 세우느냐에 따라 바이러스가 퍼지는 영역이 달라지게 된다. 따라서 벽을 세울 수 있는 모든 경우를 전부 탐색해야 한다. 초기에 입력받을 배열과 벽을 세울 경우를 탐색하기 위한 배열, 벽을 세웠을 때 바이러스가 퍼졌을 경우의 배열 이렇게 세 가지의 배열이 필요하다. 바이러스가 퍼졌을 경우, 바이러스가 퍼지지 않은 영역인 안전 영역 즉 값이 0인 영역을 bfs를 사용..

    [BOJ] 백준 2468 안전 영역

    https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 풀이 방법 내리는 비의 양에 따라 일정한 높이 이하의 모든 지점은 물에 잠긴다. 비의 양보다 지점이 더 높을 경우, 안전한 영역이므로 그 영역의 개수를 구한다. 비의 양에 따른 모든 경우를 다 조사해서 안전한 영역의 최대 갯수를 찾아야 하므로, 주어진 영역 높이의 최솟값부터 최댓값까지 모든 경우의 수를 탐색한다. dfs를 사용해서 안전 영역의 갯수를 세고 모든 경우의 수를 비교해서 최댓값을 도출한다. 다..

    [iOS] extension에서 Override하기

    발단 슈퍼 클래스인 ReplyTVCell을 상속받은 ReReplyTVCell이라는 서브 클래스에서 메서드 내부를 수정하기 위해 override 선언을 했더니 'Overriding non-@objc declarations from extensions is not supported'라는 에러 메시지가 떴다. 해결 - @objc 열심히 구글링을 했더니 슈퍼 클래스의 메서드 앞에다 @objc를 붙이면 된다는 사실을 알아냈다. extension ReplyTVCell: NuteeAlertActionDelegate { // Super class @objc func showNuteeAlertSheet() {} } 이제 override가 가능해진다! class ReReplyTVCell: ReplyTVCell { // S..

    [iOS] 뷰 생명주기(View life cycle)에 대해서 알아보자

    [iOS] 뷰 생명주기(View life cycle)에 대해서 알아보자

    뷰 생명주기(View's life cycle)란? - 뷰가 나타나고 사라지는 주기를 말한다. 앱은 하나 이상의 뷰로 구성이 되어 있고, 각각의 뷰들은 라이프 사이클을 가지고 있다. 따라서 뷰의 라이프 사이클을 고려해서 로직을 넣고, 구성해야 한다. 각각 Did와 Will의 차이가 있는데 하나씩 살펴보자. ViewDidLoad : 뷰 컨트롤러 클래스가 생성될 때, 가장 먼저 실행이 된다. 특별한 경우가 아니라면 딱 한 번 실행되기 때문에 초기화할 때 사용할 수 있다. ViewWillAppear : 뷰가 생성되기 직전에 항상 실행이 되기 때문에 뷰가 나타나기 전에 실행해야 하는 작업들을 여기서 할 수 있다. ViewDidAppear : 뷰가 생성되고 난 뒤에 실행된다. 데이터를 받아서 화면에 뿌려주거나, 애..

    [iOS] 불필요한 서버 호출 코드 수정하기

    프로젝트를 수행하고 있던 중에, 컬렉션 뷰 셀을 초기화와 동시에 서버에서 호출한 데이터를 불러와야 하는 일이 있었다. 그래서 아무 생각 없이 UICollectionViewDataSource 프로토콜의 메서드인 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {} 이 안에다 초기화 코드와 서버 호출 코드를 모두 작성했다. 그랬더니 발생한 문제... 셀이 재사용될 때마다 불필요한 서버 호출이 발생하는 것이다. 내가 원하는 건 단 한번의 서버 호출로 셀에 데이터를 채우고 초기화하는 거라 코드를 수정할 필요가 있었다. override init(frame:..

    [iOS] 앱 생명주기(App life cycle)에 대해서 알아보자

    [iOS] 앱 생명주기(App life cycle)에 대해서 알아보자

    앱 생명주기(App's life cycle) - 앱 생명주기(App's Life Cycle)란? 앱의 실행부터 종료까지의 주기를 말하며, 앱이 foreground나 background에 있을 때 시스템 알림에 응답하고 기타 중요한 시스템 관련 이벤트를 처리하는 단계들을 말한다. 앱의 상태 변화 - iOS에서 앱은 3가지의 실행 모드와 5가지의 상태가 있고 항상 하나의 상태를 지니고 있다. Not Running 실행되지 않았거나, 앱 실행이 종료된 상태 Foreground Inactive: 실행 중이지만, 이벤트를 받고 있지 않는 상태. 예를 들어, 앱 실행 중에 알람이 화면을 덮어서 앱이 실질적으로 이벤트를 받고 있지 못하는 상태를 말한다. Active: 앱이 실질적으로 작동하고 있는 상태 Backgro..