전체 글(223)
-
[알고리즘] Swift -백준 #2178(미로 탐색) -BFS
문제링크 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 문제 N×M크기의 배열로 표현되는 미로가 있다. 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이..
2023.02.20 -
[알고리즘] Swift -백준 #2583(영역 구하기) -DFS
문제링크 https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net 문제 눈금의 간격이 1인 M×N(M,N≤100)크기의 모눈종이가 있다. 이 모눈종이 위에 눈금에 맞추어 K개의 직사각형을 그릴 때, 이들 K개의 직사각형의 내부를 제외한 나머지 부분이 몇 개의 분리된 영역으로 나누어진다. 예를 들어 M=5, N=7 인 모눈종이 위에 과 같이 직사각형 3개를 그렸다면, 그 나머지 영역은 와 같이 3개의 분리된 영역으로 나누어지게 된다. ..
2023.02.20 -
[알고리즘] Swift -백준 #1012(유기농 배추) -DFS
문제링크 https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 문제 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 ..
2023.02.19 -
[알고리즘] Swift -백준 #2667(단지번호붙이기) -DFS
문제링크 https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를..
2023.02.18 -
[알고리즘] Swift -백준 #2606(바이러스) -DFS/BFS
문제링크 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 문제 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 ..
2023.02.18 -
[알고리즘] Swift -백준 #1260(DFS와 BFS)
문제링크 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ ..
2023.02.17 -
[알고리즘] Swift -백준 #11286(절댓값 힙)
문제링크 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 문제 절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다. 배열에 정수 x (x ≠ 0)를 넣는다. 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게 된다. 입력 첫째 줄에 연산의 개수 N(1≤N≤100..
2023.02.16 -
[알고리즘] Swift -백준 #2841(외계인의 기타 연주)
문제링크 https://www.acmicpc.net/problem/2841 2841번: 외계인의 기타 연주 첫째 줄에 멜로디에 포함되어 있는 음의 수 N과 한 줄에 있는 프렛의 수 P가 주어진다. (N ≤ 500,000, 2 ≤ P ≤ 300,000) 다음 N개 줄에는 멜로디의 한 음을 나타내는 두 정수가 주어진다. 첫 번째 정수 www.acmicpc.net 문제 상근이의 상상의 친구 외계인은 손가락을 수십억개 가지고 있다. 어느 날 외계인은 기타가 치고 싶었고, 인터넷에서 간단한 멜로디를 검색했다. 이제 이 기타를 치려고 한다. 보통 기타는 1번 줄부터 6번 줄까지 총 6개의 줄이 있고, 각 줄은 P개의 프렛으로 나누어져 있다. 프렛의 번호도 1번부터 P번까지 나누어져 있다. 멜로디는 음의 연속이고, ..
2023.02.15 -
[iOS] Frame 과 Bounds
👉 시작 Bounds 와 Frame 모두 뷰의 위치와 크기를 나타내는 UIView의 프로퍼티이다. 두가지의 차이점을 알아보자요. 👉 Frame https://developer.apple.com/documentation/uikit/uiview/1622621-frame 상위 뷰의 좌표 시스템에서 뷰의 위치와 사이즈를 나타낸다. frame이 나타내는 origin(x, y)는 슈퍼뷰의 원점을 (0, 0)으로 보고 원점으로부터 얼마나 떨어져있는 지를 나타낸다. 👉 Bounds https://developer.apple.com/documentation/uikit/uiview/1622580-bounds 자신의 좌표 시스템에서 뷰의 위치와 크기를 나타낸다. 자신의 좌표(default 값)이 (0, 0)이다. 👉 Fra..
2023.02.14 -
[알고리즘] Swift -백준 #14426(접두사 찾기) -실패
문제링크 https://www.acmicpc.net/problem/14426 14426번: 접두사 찾기 문자열 S의 접두사란 S의 가장 앞에서부터 부분 문자열을 의미한다. 예를 들어, S = "codeplus"의 접두사는 "code", "co", "codepl", "codeplus"가 있고, "plus", "s", "cude", "crud"는 접두사가 아니다. 총 N개의 문자 www.acmicpc.net 문제 문자열 S의 접두사란 S의 가장 앞에서부터 부분 문자열을 의미한다. 예를 들어, S = "codeplus"의 접두사는 "code", "co", "codepl", "codeplus"가 있고, "plus", "s", "cude", "crud"는 접두사가 아니다. 총 N개의 문자열로 이루어진 집합 S가 ..
2023.02.11 -
[iOS] SafeArea
👉 SafeArea 란? 아이폰X부터 상단의 노치가 등장하면서 SafeArea 가 나오게 되었다. 상단의 노치부분과 하단의 홈바부분을 제외한 영역을 말한다. 컨텐츠가 제대로 안전하게 보일 수 있는 부분이다. 세로 가로 👉 SafeArea 적용 SafeArea에 적용한 View Superview에 적용한 View 화면 전체를 다 채울 때에는 SafeArea를 적용하지 않을 수 있다. 원하는 부분의 제약조건(Constraint)을 Safe Area 에서 Superview 로 변경하면 된다. ✔️ SafeArea 적용 해제 ViewController에서 'Use Safe Area Layout Guides' 체크 해제를 하면 된다. 체크했을 때 체크 해제했을 때 SafeArea을 아예 사용하지 않고 이용이 가능..
2023.02.11 -
[iOS] 스토리보드 (Storyboard) 와 코드베이스 (CodeBase)
iOS 앱의 UI를 만들 때에는 스토리보드를 사용하거나 코드로 짜는 방법 두 가지가 있다. 처음 Xcode를 접하였을 때 기본적으로 Main.storyboard 파일이 생성되어 있어 이 방법을 먼저 사용할 것이다. 스토리보드로 사용하다 이제 문제점이 하나씩 나타날 것이고 그러면 코드UI로 넘어가는 것 같다. 그래서 이번에는 스토리보드의 장단점과 코드UI 와의 차이를 알아보려고 한다. 👉 스토리보드 (Storyboard) 직관적으로 앱의 뷰와 흐름을 알 수 있다. 소스코드를 보지 않아도 UI 확인이 가능하다. 결과물을 예측하기 쉽다. 화면 로딩이 오래걸린다. 재사용성이 떨어진다. IBOutlet, IBAction 등의 연결이 끊어지면 찾기가 어렵다. 여러 명이 작업할 때 conflict가 발생할 경우 해결..
2022.12.01 -
[Design Pattern] 디자인패턴 -MVC 패턴
👉 MVC 패턴이란 Model + View + Controller 구조의 아키텍처 패턴 Model : 앱의 데이터와 비즈니스 로직을 가지고 있음 View : 사용자에게 데이터를 보여주는 UI를 담당함 Controller : Model 과 View의 중간다리로 View로 부터 사용자의 액션을 받아 Model에게 어떤 작업을 해야하는 지 알려주거나, Model의 데이터 변화를 View에게 전달하여 View를 어떻게 업데이트할 지 알려줌 👉 서로 상호작용 Model & Controller - Controller는 Model 에 접근 가능 - Model은 Controller 에 Notification & KVO 방식을 통해 모델의 변화를 알림 Model & View - Model 과 View는 서로 소통 불가능..
2022.09.18 -
[UIKit] 버튼 클릭 후 사파리 URL 열기
임포트 한 후 import SafariServices 버튼이벤트 @IBAction func didTabLinkBtn(_ sender: Any) { let url = NSURL(string: "https://www.naver.com/") let urlView: SFSafariViewController = SFSafariViewController(url: url! as URL) self.present(urlView, animated: true, completion: nil) } 여기에서 URL주소를 정확하게 입력해줘야한다. let url = NSURL(string: "URL주소 입력") 결과
2022.09.16 -
[UIKit] 뷰컨트롤러(ViewController) Dismiss 후 데이터 전달 -델리게이트 패턴
https://nlestory.tistory.com/155 [Design Pattern] 디자인패턴 -델리게이트 패턴 (Delegate Pattern) 👉 Delegate 란? 사전적의미는 '위임하다'라는 뜻이다. 즉 위임자를 갖고 객체가 다른 객체에게 자신의 일을 위임하는 형태 👉 이벤트를 전달하는 방식 만약에 A뷰컨트롤러에서 B뷰컨트롤러로 이 nlestory.tistory.com 두개의 뷰컨트롤러가 있을 때 첫번째 VC에서 두번째 VC로 이동 후 두번째 VC의 텍스트필드의 데이터를 첫번째 VC의 라벨로 받아올 것이다 화면 이동 IBAction 을 이용하여 버튼을 클릭했을 때 두번째 VC로 이동한다 두번째 VC에 닫기버튼도 추가한다 프로토콜 생성 (첫번째 VC에서 진행) 프로토콜 상속 fix버튼 클릭..
2022.09.01 -
[UIKit] 테이블뷰 셀안에 있는 버튼 클릭 이벤트 처리하기 (자세히) -델리게이트 패턴
테이블뷰 클릭이벤트만들기 (참고) 더보기 2022.08.14 - [STUDY(스터디)/iOS] - [iOS/Swift] 테이블뷰 만들기 & 테이블뷰 셀 클릭이벤트 [iOS/Swift] 테이블뷰 만들기 & 테이블뷰 셀 클릭이벤트 스토리보드에 테이블뷰를 추가한다. 스토리보드의 테이블뷰를 뷰컨트롤러에 선언해준다 @IBOutlet weak var myTableView: UITableView! 테이블뷰셀을 만든다 새로운 파일 추가하여 Cocoa Touch Class에서 UITabl.. nlestory.tistory.com 테이블뷰셀에 있는 버튼 클릭이벤트 만들기 테이블뷰셀파일에서 IBAction을 만들어준다 셀을 클릭하면 뷰컨트롤러에서 설정해준 셀클릭이벤트 함수가 호출되고 버튼을 클릭하면 테이블뷰셀에서 설정해준 ..
2022.09.01 -
[UIKit] 카카오 (다음) 지도 API 마커추가하기
2022.08.14 - [STUDY(스터디)/iOS] - [iOS/Swift] 카카오 (다음) 지도 API 사용하기 [iOS/Swift] 카카오 (다음) 지도 API 사용하기 SDK 다운로드 https://apis.map.kakao.com/ios/guide/#step1 내 애플리케이션 추가하기 https://developers.kakao.com/console/app 카카오계정 로그인 여기를 눌러 링크를 확인하세요. accounts.kakao.com iOS추가.. nlestory.tistory.com var mapPoint: MTMapPoint? var poiItem: MTMapPOIItem? override func viewDidLoad() { super.viewDidLoad() configureLoca..
2022.08.31 -
[UIKit] Snapkit(스냅킷) 테이블뷰셀 오토레이아웃 (라벨길이에 따른 가변적 높이 설정)
🧸 시작 스냅킷라이브러리를 사용하여 테이블뷰셀을 만들어보았다. 테이블뷰 셀에 라벨이 있는 데 그 라벨의 텍스트 길이가 유동적으로 변경되는 식으로 진행했다. 그 때 텍스트가 잘리지 않게 오토레이아웃을 잡는 방법을 적용하였다. 🧸 테이블뷰 높이를 동적 할당 //MARK: - 테이블뷰 관련 extension SearchViewController: UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 } func tableView(_ tableView: UITableView, cellForRowAt indexPath..
2022.08.25 -
[알고리즘 기초] 동적계획법(DP)
동적계획법 (Dynamic Programming) 문제를 쪼개서 작은 문제의 답을 구하고 그걸로 더 큰 문제의 답을 구하는 것을 반복 1) 정의 : DP함수의 정의 2) 구하는 답 : 문제에서 요구하는 정답 (출력값) 3) 초기값 : DP함수의 초기값 4) 점화식 : DP함수의 점화식 피보나치 수열 1) 정의 : f(i) : i번째 피보나치 수 2) 구하는 답 : f(n) 3) 초기값 : f(0) = 0 f(1) = 1 4) 점화식 : f(i) = f(i-2) + f(i-1) if i >= 2 1) Bottom-up 방식으로 구현 : 반복문 let input = Int(readLine()!)! var arr = [Int]() arr.append(0) arr.append(1) for i in 2...90 ..
2022.08.24 -
[알고리즘] Swift -백준 # 2748 (피보나치 수2) -DP
문제링크 https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55..
2022.08.24