전체 글(228)
-
[알고리즘] Swift -백준 #9663(N-Queen) -백트래킹
문제링크 https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (1 ≤ N < 15) 출력 첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다. 예제 입력 1 복사 8 예제 출력 1 복사 92 분석 가로세로 n 크기인 체스판위에 퀸 n개를..
2023.03.20 -
[알고리즘] Swift -백준 #5014(스타트링크) -BFS
문제링크 https://www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 문제 강호는 코딩 교육을 하는 스타트업 스타트링크에 지원했다. 오늘은 강호의 면접날이다. 하지만, 늦잠을 잔 강호는 스타트링크가 있는 건물에 늦게 도착하고 말았다. 스타트링크는 총 F층으로 이루어진 고층 건물에 사무실이 있고, 스타트링크가 있는 곳의 위치는 G층이다. 강호가 지금 있는 곳은 S층이고, 이제 엘리베이터를 타고 G층으로 이동하려고 한다. 보통 엘리베이터에는 어떤 층으로 이동할 수 있는 버..
2023.03.20 -
[알고리즘] Swift -백준 #7576(토마토) -BFS
문제링크 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다...
2023.03.17 -
[알고리즘] Swift -백준 #6593(상범 빌딩) -BFS
문제링크 https://www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 문제 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 지나갈 수 없거나, 비어있어서 지나갈 수 있게 되어있다. 당신은 각 칸에서 인접한 6개의 칸(동,서,남,북,상,하)으로 1분의 시간을 들여 이동할 수 있다. 즉, 대각선으로 이동하는 것은 불가능하다. ..
2023.03.16 -
[iOS] Concurrency Programming (동시성 프로그래밍) 3 : Operation
👉 이전 글 [iOS] Concurrency Programming (동시성 프로그래밍) 2 : GCD, DispatchGroup, DispatchWorkItem 👉 시작 2023.03.15 - [iOS/iOS] - [iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기) [iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기) 👉 시작 프로그래밍 nlestory.tistory.com 👉 시작 동시성 프로그래밍을 하기 위해서 iOS에서 제공하는 기술인 GCD와 Operation 중 오늘은 Operation 에 대한 공부한 내용이다. 👉 Operation 단일 작업과 관련된 코..
2023.03.16 -
[iOS] Concurrency Programming (동시성 프로그래밍) 2 : GCD, DispatchGroup, DispatchWorkItem
👉 이전 글 [iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기) 👉 시작 프로그래밍을 하면서 가장 어려웠던 부분이 비동기 처리였던 거 같다. 예전에 비동기라는 개념을 몰랐던 학생시절에 프로젝트를 만들면서 엄청난 고생을 했던 적이 떠오른다 ,, ㅎㅎ nlestory.tistory.com 👉 시작 위의 글에서는 동시성 프로그래밍과 비슷한 개념에 대해서 공부했다. 동시성 프로그래밍을 하기 위해서 iOS에서 제공하는 기술인 GCD와 Operation가 있다 이번에는 GCD에 대해서 공부해보았다. 👉 GCD (Grand Central Dispatch) = Dispatch 시스템에서 관리하는 디스패치 큐에 작업을 제출하여 멀티코어 하드웨어에서 ..
2023.03.15 -
[iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기)
👉 시작 프로그래밍을 하면서 가장 어려웠던 부분이 비동기 처리였던 거 같다. 예전에 비동기라는 개념을 몰랐던 학생시절에 프로젝트를 만들면서 엄청난 고생을 했던 적이 떠오른다 ,, ㅎㅎ 서버와 통신하면서 반드시 필요한 비동기처리,, iOS에서 비동기를 처리할 때 GCD를 사용하여 구현한다. 디스패치큐와 컴플리션 블럭을 활용하여 처리한다. 그렇다면 비동기와 비슷하게 생긴 동시성은 무엇인가? 이번에는 동기와 비동기, 직렬과 동시에 대해서 알아보았다. 👉 Sync (동기) / Async (비동기) ✔️ Sync (동기) 프로그램의 흐름과 이벤트의 발생 및 처리를 종속적으로 수행하는 방법이다. 작업이 끝나는 것을 기다린 후 다음 작업을 처리한다. import UIKit class ViewController: ..
2023.03.15 -
[iOS] UIView의 Life Cycle (생명주기)
👉 시작 이제 스토리보드가 아닌 코드베이스 UI로 구현하는 것이 편해지고 익숙해졌다. MVC패턴을 구현하면서 View 와 ViewController 를 분리하게 되면서 UIView 를 많이 다루게 되었다. UIView를 UIViewController에 연결하면서 호출순서가 헷갈리기 시작했다. UIView의 메서드들을 공부하면서 서로의 호출순서를 비교해보기로 했다. 또한 코드베이스 UI를 만들면 init(frame: ) 을 사용하는 데 required init(coder: )를 생성해야 에러가 사라지는 것을 볼 수 있다. xcode에서 바로 에러를 잡아주어서 단순히 넘어갔지만 공부를 해보기로 했다. 먼저 공부를 하고 나서 사용했어야 했는데 순서가 잘못되었지만 그래도 지금이라도 궁금해져서 다행이다 ㅎㅎ 제대..
2023.03.09 -
[iOS] super.viewDidLoad() 호출하는 이유
👉 시작 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } 프로젝트를 처음 생성하면 ViewController 에 ViewDidLoad()는 기본으로 구현되어 있는 메소드이다. 생명주기 메소드를 작성하다가 호출할 때마다 superClass를 작성하는 것이 자연스럽게 호출하게 되었다. 당연히 슈퍼클래스의 내용을 상속받아 재정의하는 의미라고는 알고 있었지만 까먹고 작성하지 않았을 때가 있었는 데 호출을 하지 않아도 에러가 나지 않았다. 이 부분에서 super.viewDidLoad() 메소드를 호출하는 이유가 궁금해져서 찾아보았다. 👉 SuperClass (슈퍼클래스) 를 호출..
2023.03.07 -
[iOS/Swift] RxSwift 기본 개념
👉 RxSwift 란? ‘RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers. By Marin Todorov. ‘RxSwift — Reactive Programming with Swift.’ 관찰 가능한 시퀀스와 함수 스타일 연산자를 사용하여 비동기 및 이벤트 기반 코드를 구성하는 라이브러리이다. 새로운 데이터에 반응하며 순차적으로 처리하게 함으로써 비동기 프로그램을 쉽게 하도록 도와준다. ✔️ RxSwift 사용하는 이유 ? 비동기..
2023.03.05 -
[UIKit] 웹이미지 다운받기(비동기 처리) -Closure, RxSwift
🧸 시작 이미지뷰와 버튼을 통해서 웹 이미지를 다운받아 보는 방법이다. 간단하게 버튼을 누르면 이미지가 나타나는 기능을 구현할 것이다. 이번에는 코드베이스가 아닌 스토리보드로 진행할 것이다. 🧸 스토리보드에 ImageView(이미지뷰)와 Button(버튼)을 추가한다. import UIKit class ViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var loadImageBtn: UIButton! override func viewDidLoad() { super.viewDidLoad() } @IBAction func didTabLoadImageBtn(_ sender: Any) { } } ..
2023.03.05 -
[알고리즘] Swift -백준 #10026(적록색약) -DFS
문제링크 https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글..
2023.03.03 -
[알고리즘] Swift -백준 #1189(컴백홈) -DFS, 백트래킹
문제링크 https://www.acmicpc.net/problem/1189 1189번: 컴백홈 첫 줄에 정수 R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)가 공백으로 구분되어 주어진다. 두 번째부터 R+1번째 줄까지는 R×C 맵의 정보를 나타내는 '.'과 'T'로 구성된 길이가 C인 문자열이 주어진다 www.acmicpc.net 문제 한수는 캠프를 마치고 집에 돌아가려 한다. 한수는 현재 왼쪽 아래점에 있고 집은 오른쪽 위에 있다. 그리고 한수는 집에 돌아가는 방법이 다양하다. 단, 한수는 똑똑하여 한번 지나친 곳을 다시 방문하지는 않는다. cdef ...f ..ef ..gh cdeh cdej ...f bT.. .T.e .Td. .Tfe bTfg bTfi .Tde a... ..
2023.03.03 -
[UIKit] No StroyBoard -TableViewCell (테이블뷰셀) 내부의 버튼이 클릭되지 않을 때
🧸 시작 테이블뷰셀에 버튼을 만들어서 클릭 이벤트를 주었지만 작동하지 않았다. 테이블뷰셀을 클릭하는 것은 작동되었으나 내부에 있는 버튼은 클릭이 되지 않았다. 🧸 문제 해결하기 처음에는 생명주기나 호출의 문제로 생각했지만 뷰의 계층적인 문제였다. 계층을 보게되면 파란색 네모박스는 버튼이고 버튼 앞에 contentView 라는 것이 존재했다. 그러니 아무리 클릭을 해도 버튼을 클릭하는 것이 아니라 뷰를 클릭하게 된 것이다. 코드베이스로 뷰를 작성하면서 테이블뷰셀의 컴포넌트들을 추가하는 뷰가 잘못되었다. func setAddSubViews() { self.addSubview(loadIV) self.addSubview(loadPV) self.addSubview(loadBtn) } 기존에는 self.addSub..
2023.03.01 -
[UIKit] No StroyBoard -Navigation Controller (네비게이션 컨트롤러)와 TabBar Controller (탭바컨트롤러) 만들기
🧸 네이베이션 컨트롤러 ✔️ 네비게이션 컨트롤러 생성하기 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { //윈도우 씬을 가져온다 guard let windowScene = (scene as? UIWindowScene) else { return } //윈도우 크기 설정 window = UIWindow(frame: UIScreen.main.bounds) //뷰컨트롤러 인스턴스 생성 let vc = ViewController() //네비게이션 컨트롤러 설정 let navVC = UINavigationController(rootViewCo..
2023.03.01 -
[UIKit] No StroyBoard -ViewController에서 View와 Controller 분리하기
🧸 시작 MVC 패턴을 하려고하면 view와 controller가 분리되어있는데 스토리보드를 이용하면 view로 볼 수 있지만 코드베이스로 구성하게 되면 이제 ViewController에 작성하게 되면서 코드가 엄청 길어진다. view를 그리는 부분과 관리하는 부분으로 나눠서 작성하면 보기에도 빠르고 편해진다. 🧸 View 파일 생성하기 [New file...] -> [Cocoa Touch Class] -> UIView 파일 생성 🧸 View 파일 작성하기 import UIKit import SnapKit class View: UIView { lazy var redBtn: UIButton = { let btn = UIButton() btn.backgroundColor = .systemRed btn.set..
2023.03.01 -
[UIKit] Snapkit (스냅킷) 사용해보기
🧸 시작 코드베이스를 도와주는 snapkit 라이브러리를 사용해서 화면을 생성해보자~ 🧸 스냅킷 설치 2023.02.28 - [PROJECT/iOS] - [iOS/Swift] pod 설치방법 [iOS/Swift] pod 설치방법 2022.08.14 - [PROJECT/iOS] - [iOS/Swift] 스토리보드 없는 프로젝트 세팅 [iOS/Swift] 스토리보드 없는 프로젝트 세팅 프로젝트 생성 Main Interface 부분 삭제 Main 스토리보드 삭제 Info.plist 파일에서 스토리보드 nlestory.tistory.com 이제 준비는 끝 viewController 에서 화면을 만들어준다. 🧸 화면에 보여줄 버튼을 생성하고 뷰에 추가한다. import UIKit class ViewControl..
2023.02.28 -
[iOS/Swift] pod 설치방법
🧸 시작 스냅킷은 코드베이스이기 때문에 스토리보드가 필요없다. 스토리보드 없는 프로젝트 세팅을 먼저 해주고 시작한다. 2022.08.14 - [PROJECT/iOS] - [iOS/Swift] 스토리보드 없는 프로젝트 세팅 [iOS/Swift] 스토리보드 없는 프로젝트 세팅 프로젝트 생성 Main Interface 부분 삭제 version 14.2 Main 스토리보드 삭제 Info.plist 파일에서 스토리보드 삭제 메인 VC 설정 SceneDelegate 파일에 가서 설정한다 func scene(_ scene: UIScene, willConnectTo session: UISce nlestory.tistory.com 🧸 터미널을 열고 자신의 프로젝트가 있는 폴더로 이동한다. cd 원하는_경로 cd 명령어..
2023.02.28 -
[알고리즘] Swift -백준 #7562(나이트의 이동) -BFS
문제링크 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 ..
2023.02.27 -
[알고리즘] Swift -백준 #14888(연산자 끼워넣기) -DFS
문제링크 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 ..
2023.02.25