본문 바로가기

전체 글158

[백준] Swift 9466 텀 프로젝트 DFS 문제 : https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 분석 : 학생들이 cycle을 이루는지 파악하기 위해 DFS로 접근해야 한다. 처음에 접근한 방식은 while문을 통해 dfs 탐색을 하고자 했지만 visit를 검사해주지 않아서 시간초과가 났다. 그래서 블로그를 참고해 다시 풀었다 ㅠ 일반적으로 방문한 노드인지 확인을 위해 visit배열을 사용하는데 여기서는 done(팀을 이루었는지 아닌지)도 배열을 하나 새로 만든다. 같이 프로젝트 하고 싶.. 2022. 4. 12.
[Swift] Opaque Type이란 SwiftUI를 보면 body에 some 키워드가 붙은걸 볼 수 있습니다. 이게 뭔지 궁금해져서 찾아보고 정리하고자 합니다 🤔 참고 자료 : https://docs.swift.org/swift-book/LanguageGuide/OpaqueTypes.html Opaque Types — The Swift Programming Language (Swift 5.6) Opaque Types A function or method with an opaque return type hides its return value’s type information. Instead of providing a concrete type as the function’s return type, the return value is desc.. 2022. 4. 12.
[프로그래머스] Swift 2020 카카오 인턴십 키패드 누르기 문제 : https://programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 난이도 level 1 분석 : 간단한 구현 문제였다 ! 1, 4, 7번은 왼손으로 3, 6, 9번은 오른손으로 누르고 2, 5, 8, 0 숫자는 현재 있는 손 위치에서 거리가 가까운 손이 누르는 구현 문제였다. 숫자가 행끼린 3만큼 차이가 나기.. 2022. 4. 8.
[백준] Swift 2529 부등호 backtracking 문제 : https://www.acmicpc.net/problem/2529 2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시 www.acmicpc.net 분석 : 혼자서 풀지 못했다 .. ㅜ 부등호의 조건을 만족하는 중복 없는 조합을 구하는 문제였다. 그러한 조합들 중 최대 값, 최소 값을 구하는 게 답이였다 ! 우선 부등호 개수 + 1개만큼의 숫자를 사용한다. 조건 만족시 answer 배열에 담는다. 그리고 for 문 0 ~ 9 10개의 숫자에 대해 첫번째 숫자일 경우는 부등호 조건을 체크하지 않고 바로 숫자를 넣는다. 그 다음 index가 1이상일.. 2022. 4. 7.
[iOS] Swift Unit Test 살펴보기 Unit Test란 ? 단위 테스트, 특정 기능이 의도한대로 잘 작동되는지 점검하기 위해 작성하는 코드를 말한다. 버그에 대한 가능성을 낮추고 코드를 개선하기 위해 작성하는 것이 중요하다. Xcode에서 "Include Test"를 선택하면 프로젝트이름-Test, 프로젝트이름-UITest 두개가 만들어진다. 만약 처음부터 테스트 할 생각이 없어 "Include Test" 체크하지 않고 프로젝트를 생성했다면 ? 아래 그림처럼 Xcode Test Navigator 탭을 클릭하고 unit test target을 클릭하면 파일이 생성된다. 어쨌든 파일을 생성하고 나면 아래 그림과 같다. XCTestCase를 상속 받고 있다. 테스트 케이스, 메소드를 정의하는 클래스로 테스트를 위한 클래스로 생각하면 될거 같다... 2022. 4. 7.
[백준] Swift 1300 k번째 수 BS(Bineary Search) 문제 : https://www.acmicpc.net/problem/1300 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 풀이 : 문제를 직접 풀진 못했지만, 신기한 풀이가 있어서 기록을 남겨보려구 한다. 문제는 2차원 N*N 배열 값을 1차원 N*N배열로 바꾸었을때 k번째 인덱스의 값(m)을 구하는 문제였다. 예를 들어서 N = 4 배열이 있을때, 이를 1차원 배열로 늘여보면 이렇게 될 것이고 그러므로 이를 이분 탐색으로 접근 할 수 있는 것이다. 사실 선형 탐색으로 찾으려 .. 2022. 3. 31.
[Swift] Access Control (open, public, internal, fileprivate, private) Access Control 말 그대로 코드의 접근을 제어하는 기능이다. 개별 타입(individual types)(클래스, 구조체 및 열거) 뿐만아니라, 해당 타입에 속하는 프로퍼티, 메소드, 이니셜라이저 및 첨자(subscripts)에 대해 특정 접근 레벨을 지정 할 수 있다. 프로토콜은 전역 상수, 변수 및 함수처럼 특정 컨텍스트로 제한된다. 접근 제어는 modules과 source file 대상으로 적용된다. swift는 엔티티에 대해 5가지 접근 제어 레벨을 가진다. open, public 정의된 모듈내 모든 소스 파일 내에서 사용할 수 있다. open 접근은 클래스 및 클래스 멤버에만 적용된다. struct, enum 등의 타입은 Public이 가장 최상위 접근 제어다. 클래스와 클래스 멤버에 .. 2022. 3. 29.
[백준] Swift 1806 부분합 투포인터 문제 : https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 풀이 : 연속된 배열의 부분 배열 중 그 합이 M 이상이 되는 부분 배열 중에서 길이가 짧은 배열의 길이를 출력하는 문제다. startIndex와 endIndex를 첫 인덱스에 위치하도록 두었고, sum 값은 원소 초기값으로 설정했다. 그리고 while문을 돌때마다 endIndex값은 하나씩 증가시킨다. 그리고 sum 값이 M보다 큰 경우가 발생한다면 길이를 줄일 수 있을만.. 2022. 3. 29.
[프로그래머스] 타겟 넘버 DFS C++ 문제 : https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr 분석 : 재귀 방식을 이용해서 풀었다. DFS/ BFS는 재귀 or stack + visit 판별 방식으로 풀 수 있는데 이번 문제는 재귀가 더 직관적일 것 것 같아서 재귀 방식으로 접근했다. 중요한 것은 재귀 종료 조건이다. 총 원소의 숫자만큼 depth를 내려갔다면 빠져나온다. 처음엔 -로 dfs를 돌때 depth를 왜 증가시.. 2022. 3. 25.
[프로그래머스] 짝지어 제거하기 stack 문제 : https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 풀이 : 예시 : "baabaa" 두개씩 짝 지으면 문자열에서 제거 할 수 있으므로, 처음부터 순회하여 두개 나오는 원소가 있으면 string에서 제거하고 다시 인덱스를 처음으로 하여 string 길이가 인덱스보다 작아질때까지 반복하였다. 하지만 O(n^2) 시간 복잡도였기 때문에 효율성에서 시간 초과 잔뜩 얻었다 ㅎ 블로그를 참고해 sta.. 2022. 3. 25.
[프로그래머스] 가장 큰 수 STL(sort) 문제 : https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 분석 : 우선 가장 첫번째 자리가 큰 원소 먼저 정렬 되어야 하는 것으로 보인다 ! 하지만 문제는 첫번째 자리 원소가 같은 원소들이다. 예를 들어 [8, 3, 30, 34, 36] 가 있을때 기본 sort함수로 정렬하면 [8, 36, 32, 30, 3] 순으로 정렬된다. 하지만 32303보.. 2022. 3. 25.
[RxSwift] Signal, ControlProperty, ControlEvent 란 ? 저번 Driver에 이어서 나머지 Trait들도 마저 다 살펴보려고 합니다. Signal signal은 Driver와 유사합니다. 하지만 Driver는 subscribe할 때 한번 replay 하는 반면, Signal은 그렇지 않습니다. Driver와 Signal을 구독하게 되면 다음과 같이 replay 합니다. PublishRelay와 BehaviorRelay과 같이 Signal은 구독 이후의 이벤트를 방출하고 Driver은 구독을 하면 가장 최근의 이벤트를 방출한다는 점에서 차이점이 있습니다. ControlProperty UI Element의 property를 나타내기 위한 Trait 특징 실패하지 않는다. share(replay: 1) 처럼 행동한다 - stateful, subscribe 호출 시 .. 2022. 3. 21.
[RxSwift] Driver란 ? (feat. bind) observable을 생성하고 구독 할 때 가끔 subscribe 대신 asDriver(), drive()로 받는 경우가 있습니다 .. 뭐지 ?? 하면서 잊고 살던 중 traits 관련 문서를 읽고 driver가 있어 정리 해보려구 합니다 ! 참고 문서 : https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Traits.md#driver GitHub - ReactiveX/RxSwift: Reactive Programming in Swift Reactive Programming in Swift. Contribute to ReactiveX/RxSwift development by creating an account on GitHub. github.co.. 2022. 3. 21.
[RxSwift] Traits 이란 Single, Maybe, Completable라는 세 가지 Trait이 있습니다. Single Observable의 변형으로 일련의 요소를 방출하는대신 항상 단일 요소 또는 오류를 방출하도록 합니다. Single을 사용하는 일반적인 예는 URLSession에 response로의 .success, .error을 방출하는데 사용됩니다. Single 생성하기 func getRepo(_ repo: String) -> Single { return Single.create { single in let task = URLSession.shared.dataTask(with: URL(string: "https://api.github.com/repos/\(repo)")!) { data, _, error in if let.. 2022. 3. 19.
[RxSwift] Disposable DisposeBag 이란 이번시간에는 disposable에 대해 공부해볼 것입니다. 매번 subscribe 해주고 dispose(by: disposeBag)에 담아주는데요 여기서 onDisposed는 Observable이 메모리에서 해제되면서 호출되어 집니다. Observable이 onNext -> error 혹은 completed 이벤트를 호출하고 종료되면 리소스를 관리해 줄 필요 없이 정상적으로 메모리가 해제 되지만 Rxswift 공식 가이드라인을 보면 이 경우에도 리소스를 정리하는 것을 권고 하고 있습니다. 이때 Disposable 타입을 모두 모아 한번에 해제할 수 있게끔 하는 방법이 DisposeBag을 이용하는 방법입니다. subscribe의 원형인데요. 리턴 타입으로 Disposable을 반환하는데 이것들을 Disp.. 2022. 3. 17.
[백준] Swift 2468 안전 영역 BFS 문제 : https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 분석 : 문제의 안전 영역의 정의를 처음엔 이해하기 어려웠다. 그래서 얼만큼의 장마가 내린다구 ? 했는데 모든 장마 경우의 수를 다 검사해 안전 영역이 최대가 될때 안전 영역의 개수를 출력하라는 뜻이었다. bfs를 돌아 visit배열에 false인 영역을 true로 만들고 끝내고 오면 bfsAll 함수에서 하나씩 cnt + 1 하여 안전 영역의 개수를 구해준다. 그 전에 visit 배열을 안전 .. 2022. 3. 11.
[Swift] CustomStringConvertible CustomStringConvertible 인스턴스를 문자열로 변환할 때 커스텀하게 변환할수 있는 프로토콜이다. struct Point { let x: Int, y: Int } let p = Point(x: 21, y: 30) print(p) // Prints "Point(x: 21, y: 30)" 기본 Point 구조체를 출력할때 기본 출력값으로 나오지만 CustomStringConvertible 를 사용하면 아래 description을 준수해야 하며 extension Point: CustomStringConvertible { var description: String { return "(\(x), \(y))" } } print(p) // Prints "(21, 30)" 원하는 출력값으로 변형하여 출력.. 2022. 3. 7.
[RxSwift] Combine Operator(CombineLatest, Merge, StartWith, Concat, Zip, WithLastFrom, Sample, SwitchLatest, Debounce) rxSwift에 대한 강의를 듣다가 자주 사용하는 operator에 대해 정리해 놓으면 좋을 것 같다는 생각이 들더라구요 그래서 오늘은 유용하게 사용되는 operator들에 대해 정리해보도록 하겠습니다 계속 operator에 관해 사용할때마다 여기에 정리해 놓을려구요 ! Combine 서로 다른 스트림을 하나의 스트림으로 합칠때 사용하는 operator CombineLatest 두 observable에서 아이템을 방출할때 가장 최신의 아이템을 결합하고, 결합된 아이템을 발행 let left = PublishSubject() let right = PublishSubject() let observable = Observable.combineLatest(left, right, resultSelector: { .. 2022. 3. 6.
[백준] 1516 게임 개발 문제 : https://www.acmicpc.net/problem/1516 1516번: 게임 개발 첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부 www.acmicpc.net 풀이 : 먼저 개발할 것이 있다는 점에서 위상 정렬 문제다. 👉🏻 위상정렬 알고리즘 자신의 노드로 향하는 다른 노드가 있을때 그 노드를 v[자신].push_back(향하는 노드)로 넣어줬다. 그리고 향하는 들어오는 노드의 값을 증가시켜줬다. (개념과 반대다) 즉 indegeree[향하는노드]++ 따라서 값을 도식화 하면 아래와 같다. 그리고 indegree가 0인 값부터 vec.. 2022. 3. 3.
순열, 조합, 중복순열, 중복조합 with C++ 1. 순열(Permutation) 순서를 따지고, 중복을 허용하지 않는다. (순서O, 중복X) 백준 관련 문제 : 모든 순열 -> 백트랙킹 문제, visit 배열을 둬 중복을 검사한다. 재귀를 이용해 다른 원소에 대해 똑같이 수행한다. c++ 코드 : // // 10974_all_ permutation.cpp // SOMA👩🏻‍💻 // // Created by JoSoJeong on 2021/02/27. // #include #include #include #include using namespace std; vector v; bool visit[9]; int n; /// -> next_permutation(순열 시작, 순열 끝) /// with recursive void make_permu_dfs(){.. 2022. 3. 3.