[BOJ, Python] 10026 - 적록색약 ( with DFS )
·
PS (Problem Solving)
10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 좀 더 클린한 코드로 리팩토링이 필요해보이나, List와 DFS 개념을 활용하여 해결하였다. 방문 배열을 만들어주고, 정상인의 경우와 적녹색약인 경우 각각의 함수를 정의하지 않고, 정상인일 경우를 해결한 후에 적색을 녹색으로 변경하여 다시 한번 깊이 우선 탐색을 돌려주었다. import sys sys.setrecursionlimit(10 ** 9) n = int(input()) arr = list() for _ in range(n): arr.append(l..
[BOJ, Swift] 1021 - 회전하는 큐 ( with 덱(Dequeue) )
·
PS (Problem Solving)
1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 추가하는 건 맨 뒤에서, 빼는 건 양쪽 방향에서 해줄 수 있는 큐가 필요하다. 덱(double ended queue)을 구현해주면 되는데, 해당 문제에서는 양방향으로 추가해줄 필요가 없어서 기존에 구현했던 큐를 일부 수정, 변형하였다. 회전하는 큐 구현 struct Queue { var left = [Int]() var right = [Int]() var count: Int { left.count + right.count } var isEmpty: Bool ..
[자료구조, Swift] 힙(Heap) 구현하기
·
Computer Science and Engineering/Data Structures and Algorithms
Swift같은 개발 언어 중에는 힙, 큐, 덱같이 기본적으로 다른 언어에서 제공해주는 라이브러리가 따로 있지 않다. 따라서 직접 구현해줘야 한다. 알아야 될 것 1. 완전 이진트리로 부모 노드를 탐색하려면, 시작 인덱스를 1부터 시작해야 한다. 2. 힙은 우선순위 큐를 위한 자료형이다. 3. 우선순위 큐의 목적은 값을 추가할 때 부모 노드에 최댓값 or 최솟값을 넣기 위함이다. 4. 따라서 입, 출력을 할 때만 연산이 수행되고, 전체 힙의 값을 확인하면 오름차순이나 내림차순으로 정렬되지 않을 수 있다. struct Heap { var heap: Array = [] // 초기화 1. 아무 것도 넣지 않을 때 init() { } // 초기화 2. 시작부터 넣을 때 init(_ data: [Int]) { he..
[BOJ, Python] 람다(lambda)를 활용한 리스트 정렬
·
PS (Problem Solving)
1차원 리스트 정렬 arr = [5, 3, 7, 3, 6, 1, 2] arr.sort() # 오름차순 정렬 output: [1, 2, 3, 3, 5, 6, 7] arr.sort(reverse= True) # 내림차순 정렬 output: [7, 6, 5, 3, 3, 2, 1] 2차원 리스트 정렬 arr2 = [[1, 3], [2, 2], [5,3], [4, 2], [2, 2], [1, 5]] arr2.sort() # 오름차순 정렬. 부분 배열의 인덱스 별 우선 순위를 가지고 오름차순으로 정렬 # output: [[1, 3], [1, 4], [1, 5], [2, 2], [2, 2], [4, 2], [5, 3]] arr2.sort(reverse= True) # 내림차순 정렬. 부분 배열의 인덱스 별 우선 순위..
[BOJ, Swift] 18258 - 큐 2
·
PS (Problem Solving)
18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 1. 큐 구현 FIFO(First In First Out) 구조의 Queue는 Swift에서 기본적으로 제공되지 않기에 따로 구현을 해줘야한다. 추가) 왼쪽 배열에 추가 삭제) 오른쪽 배열에 값이 존재하면, 오른쪽의 마지막 값을 제거오른쪽 배열에 값이 없으면, 왼쪽 배열을 뒤집어(reversed) 오른쪽 배열에 할당 후 왼쪽 배열 삭제 struct Queue { var left = [Int]() var right = [Int]() // 큐..
[BOJ, Python] 입출력 정리
·
PS (Problem Solving)
1. 기본 PS를 할 때 기본적으로 사용되는 입출력이다. # 입력 # str, 문자열이 그대로 출력 a = input() # int, 문자열을 정수형으로 변경 a = int(input()) # list, 문자열을 문자(char) 리스트로 변경 a = list(input()) # list, 문자열을 공백으로 구분하여 문자열(str) 리스트로 변경 a = input().split() # list, 문자열을 공백을 구분하여 정수형 리스트로 변경 a = list(map(int, input().split)) # 복수 할당(공백을 구분하여 각각의 정수를 할당) a, b, c = map(int, input().split()) # 출력 # 기본 출력 print(a) # 배열을 "주어진 문자열"로 구분하여 합친 문자열로..
[BOJ, Swift] 1932 - 정수 삼각형
·
PS (Problem Solving)
1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 1. 재귀 ( 시간 초과 ) let cheung = Int(readLine()!)! var pyramid: [[Int]] = [] var result: Set = [] for _ in 0 ... cheung - 1 { pyramid.append(readLine()!.split(separator: " ").map { Int(String($0))! }) } func SOT(_ floor: Int, _ x: Int, sum: Int) { if floor == cheung { result.insert(sum) return } else { S..
[Dev, iOS] 앨범, 카메라 이미지 불러오기 & 저장하기
·
Dev/iOS
프로필 사진 등록, 편집 등 앱 내에서 해당 기능들이 수반되려면 앨범이나 카메라를 통해 이미지를 받아 화면에 띄우고, 편집을 할 수 있어야 하며 작업이 다 끝난 후에는 다시 앨범으로 저장까지 하는 과정이 필요합니다. 해당 작업을 하기 위한 기본적인 코드를 알아보겠습니다.1. 앨범, 카메라 사용 권한 등록먼저 애플의 까다로운 사생활 보호 정책으로 인해 해당 기능의 필요한 시점과 위치에서 사용 권한을 물어보는 팝업을 띄워줘야 합니다.String값으로는 해당 팝업을 띄워줬을 때 클라이언트에게 보여줄 설명을 작성해주면 됩니다.override func viewDidLoad() { super.viewDidLoad() PHPhotoLibrary.requestAuthorization( { status in ..
[Dev, iOS] Modal로 띄운 ViewController에서 Navigation으로 Push하기
·
Dev/iOS
VC1 →(modal)→ VC2 →(navigation)→ VC3 Navigation Controller로 연결된 여러 뷰에서 또 다른 뷰를 Modal 방식으로 띄우는 건 비교적 쉽지만, Modal로 띄운 뷰에서 Navigation 형태로 Push하는 건 약간의 수고를 요한다. 단순히 Modal 하나만을 띄울 땐 StoryBoard 상에서 Segue를 끌어와 identifier와 prepare 메서드를 이용하여 Modal Presentation을 구현했다면, 이번에는 VC1 속 버튼 자체에서 코드 작업이 필요하다. Navigation 형식의 Push를 원한다면 해당 뷰 컨트롤러(VC2)가 Navigation Controller에 Embed in 되어있어야 한다. 따라서 Modal 형태로 VC2를 품고 있..
[GitHub] MacOS 업데이트 후 Git 에러가 발생할 때 (xcrun: error)
·
etc
맥이 업데이트되고 나서는 항상 git을 다룰 때 xcrun: error가 발생합니다. 뭔가 항상 빠진 듯 .. 터미널을 실행하고 해당 명령어를 통해 명령어 라인 개발자 도구를 설치해주면 끝. xcode-select --install