본문 바로가기

전체 글158

[Swift] Optional에 대한 고찰 Swift는 안전성을 중요한 요소 중 하나라고 생각하는 언어입니다. 그 바탕이 되는 문법 중 하나가 바로 옵셔널(Optional)입니다. 처음 옵셔널을 봤을때 다른 언어에서는 찾아볼 수 없는 Swift만의 독특한 문법이라고 생각 들었습니다. 얼마전 옵셔널을 랩핑하는 방법과 이런 랩핑하는 방식이 귀찮을 법(?)도 한데 왜 옵셔널을 사용하는지에 대한 질문을 받았습니다. 옵셔널은 옵셔널이지 왜 사용하는지 생각해본적이 없어서 nil값일 경우 메모리에 올라가지 않는다라는 엉뚱한 대답을 한게 참 아쉽더라구요 ..(nil도 메모리에서 다른 값들과 같이 값을 가진다고 합니다 하하) 그러던 중 옵셔널에 대해 좋은 글을 읽게 되어 면접때 마저 못한 생각과 그 대답을 다시 해보고자 합니다 !! Optional이란 ? 값이 .. 2022. 4. 23.
[프로그래머스] C++ 디스크 컨트롤러 문제 : https://programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 풀이 : 디스크 스케줄링하는 문제였다. input으로 [[0,3], [1, 9], [2, 6]] (요청 시간, 작업 소요 시간)이 주어졌을때 이들을 가장 짧게 작업을 끝내는 시간 / 3 하여 평균 시간을 구해주는 문제였다. 우선은 작업 소요 시간이 짧은 것을 먼저 처리하기 위해서 우선순위큐를 사용했다. 작업은 요청시간이 짧은 순으로 sorting .. 2022. 4. 22.
[프로그래머스] Swift 2022 kakao 주차 요금 계산 문제 : https://programmers.co.kr/learn/courses/30/lessons/92341 코딩테스트 연습 - 주차 요금 계산 [180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000] programmers.co.kr 분석 : string 파싱을 이용한 구현 문제였다. C++에서는 시간을 구하는데 * 60을 하는 등 되게 복잡했는데 swift는 DateFormatter()가 있다 히히 그래서.. 2022. 4. 19.
[백준] Swift 11052 카드 구매하기 DP 문제 : https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 분석 : Bottom-up 방식으로 접근했다. d[n] - i개의 카드를 구매시 지불해야 하는 금액의 최대값 n = 1이라면 arr[1]값을 리턴한다. 그리고 for문을 도는데 n = 2라면 max(d[1] + arr[1], arr[2]) 1개짜리 카드팩 샀을때의 최대값에 1개짜리 카드팩을 더 사는 경우, 2개짜리 카드팩을 사는 경우 중 최대 값을 저장한다. n = 3 -> max(d[1] + .. 2022. 4. 19.
[백준] Swift 1504 특정한 최단 경로 dijkstra 문제 : https://www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net 분석 : 이 문제는 거쳐야 하는 노드가 2개로 한정적이어서 start -> 거쳐야하는 노드1 -> 거쳐야하는 노드2 -> end start -> 거쳐야하는 노드2 -> 거쳐야하는 노드1 -> end 둘 중 최소값을 찾으면 된다 !! 일반적인 다익스트라를 만들고 check() 함수를 통해 비교해줬다. Swift 코드 : // // main.swi.. 2022. 4. 18.
[백준] Swift 14503 로봇 청소기 시뮬레이션, DFS 문제 : https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 풀이 : 처음에 현재 위치 표시하는데 arr에 1값을 넣어서 계속 오류가 나서 1시간동안 헤맸다 .. 그리고 동, 서 구분을 반대로 해서 또 헤맸다 .. 방향 값만 잘 넣어준다면 DFS 푸는 방식대로 풀면 될거 같다 ! 왼쪽 방향으로 회전하려면 북 -> 서 // 서 -> 남 // 남 -> 동 // 동 -> 북으로 이동하면 된다. 따라서 0 -> 3, 3 -> 2, 2-> 1, 1 -> .. 2022. 4. 18.
[Combine] Subject란 (AnyPublisher) 정의 : publisher, subscriber와 같이 프로토콜이네요 ! 그리고 subject는 사실 publisher랍니다. subject는 Publisher 프로토콜을 채택하고 있습니다. 그리고 send() 메소드를 통해 값을 주입합니다. 즉 publisher는 값을 가지고 있는 주체였다면 이 값에 다른 값을 주입할 수 있는 것이 바로 subject입니다. subject는 다음과 같이 두가지 클래스로 구현될 수 있습니다. PassthroughSubject CurrentValueSubject PassthroughSubject downstream 구독자들에게 요소를 방출하는 broadcast 합니다. 예시를 봅시다. PassthroughSubject를 만들어 subscriber1과 subscriber2를.. 2022. 4. 17.
[Combine] Combine, Publisher, Subscriber 에 대해서 오늘은 Apple 에서 만든 Reactive 프로그래밍을 위한 프레임 워크 "Combine"에 대해 정리 해보려고 합니다. 그리곤 WWDC2021에서 새로 나온 Concurrency에 대해서도 알아볼 예정입니다. ➡️ 오늘의 목표 : Combine, Publisher, Subscriber, Publisher ↔️ Subscriber 정의 : 이벤트 처리 연산자들을 통해 비동기 이벤트들을 핸들링 할 수 있게 하는 프레임워크 Combine 프레임워크는 시간이 흐름에 따른 값 처리를 위한 선언적 Swift API를 제공합니다. 이러한 값은 다양한 종류의 비동기 이벤트를 나타낼 수 있습니다. Combine은 시간이 지남에 따라 변경될 수 있는 값을 노출하는 Publisher와 Publisher로부터 해당 값을 .. 2022. 4. 17.
[백준] Swift 케빈 베이컨의 6단계 법칙 BFS 문제 : https://www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 분석 : 처음에는 왜 이게 BFS지 ? 깊이에 따라 내려가니까는 DFS 아닌가 싶었다. 하지만 다시 생각해보니 우리는 깊이가 낮은 친구 관계가 있다면 이 값을 반환해야 한다. 따라서 깊이가 낮은 곳에 원하는 원소가 있다면 visit를 true로 만들어 더 깊은 곳에 원하는 원소가 있어도 방문하지 않고 넘어갈수 있게된다. 또한 자기 자신을 제.. 2022. 4. 17.
[백준] Swift 2302 극장 좌석 DP 문제 : https://www.acmicpc.net/problem/2302 2302번: 극장 좌석 주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1) www.acmicpc.net 분석 : 처음에는 VIP 좌석만 따로 1로 배열을 받고 1을 기준으로 나눠 배열을 칸만큼 곱하면(한칸씩 이동하는 경우) 되는거 아닌가 ? 생각했다. 하지만 제출 후 틀리고 보니 배열칸만큼은 두사람끼리만 자리를 바꿨을때더라 ㅎ 만약 이러한 배열이 있을때 1,2,3,4 중 두 수 예를 들어 1,2만 자리 바꿨을때 모든 수에 대한 경우의 수는 원소의 개수만큼 4이지만 12가 자리를 바꾸는 사이 34도 자리.. 2022. 4. 17.
[WWDC 2021] ARC in Swift: Basics and beyond (ARC 최적화) 영상 : https://developer.apple.com/videos/play/wwdc2021/10216/ ARC in Swift: Basics and beyond - WWDC21 - Videos - Apple Developer Learn about the basics of object lifetimes and ARC in Swift. Dive deep into what language features make object lifetimes observable,... developer.apple.com Object lifetimes and ARC traveler1의 마지막 사용 후에 release operation을 수행 traveler1의 Retain operation은 수행되지 않는데 왜냐하면 초기.. 2022. 4. 16.
[백준] Swift 1309 동물원 DP 문제 : https://www.acmicpc.net/problem/1309 1309번: 동물원 첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다. www.acmicpc.net 분석 : 처음엔 N은 주어졌는데 사자의 수가 주어지지 않아서 어떻게 푸는건지 당황했었다. 근데 동물 수와 상관없이 모든 경우의 수를 구하는 것이었다. 그래서 동물이 한마리일경우, 2마리일 경우 .. 로 생각해보았는데 규칙을 찾기 쉽지 않았다. 결국 점화식 세우는 것이 도무지 감이 잡히지 않아 다른 블로그를 보고 풀었다 ㅜ 동물의 수가 아닌 문제에 주어진 조건 N을 가지고 나눠 생각해보자 우선 동물원의 N = 1인 경우, N번째 줄에 사자는 없다, 왼쪽, 오른쪽 이 3가지 경우의 수를 지닌다. N=1 -> 3 N = 2인경.. 2022. 4. 16.
[프로그래머스] Swift 카카오 2022 k진수에서 소수 개수 구하기 implementation 문제 : https://programmers.co.kr/learn/courses/30/lessons/92335?language=swift 코딩테스트 연습 - k진수에서 소수 개수 구하기 문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소 programmers.co.kr 분석 : swift에는 진수 변환을 쉽게 해주는 함수가 있다. 그래서 다른언어보다 간결하게 푼거 같다 Swift 코드 : // // main.swift // SOMA👩🏻‍💻 // // Created by JoSoJeong on 2022/04/15. // import Found.. 2022. 4. 15.
[프로그래머스] Swift 수식 최대화 문제 : https://programmers.co.kr/learn/courses/30/lessons/67257?language=swift 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr 난이도 : level2 분석 : *, -, + 3개의 연산자를 가지고 수식을 최대화 하는 연산자의 우선순위를 적용해 최대값을 리턴하는 문제다. 나는 수식이 3개밖에 없어서 (3! => 6) 가능한 경우의 수를 손코딩하였다. 그리고 연산자가 등장하는 순서대로 op배열에 담았고 가능한 우선순위를 모두 계산해 result배열에서 .. 2022. 4. 14.
[Swift] split, components 차이 (with: 성능) 코테 문제를 풀다가 나는 완전 비효율적으로 짰지만 😞 다른 사람 코드 중 components()를 쓴 코드가 있어 이건 뭐지..? 라는 궁금증이 들었어요 ! split()함수와 비슷한거 같은데 차이점을 잘 모르겠어서 정리해보려구 합니다 !! split() 파라미터에 대해 살펴봅시다 separator : 쪼갤 단위 maxSpilts : 최대 얼마나 쪼갤지 // default : Int.max ()omittingEmptySubsequences : 결과 값에서 빈시퀀스 포함할지 false라면 쪼갠 배열이 빈 배열일지라도 반환한다. true라면 빈배열은 생략하고 반환한다 // default : true return되는 타입 : [subString] Components() 파라미터가 spilt()보다 간단해보입니.. 2022. 4. 14.
[프로그래머스] Swift 튜플 2019 카카오 implementation 문제 : https://programmers.co.kr/learn/courses/30/lessons/64065?language=swift 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 분석 : string 배열을 돌며 "{" 가 나타났을때 "}"가 나타나기 전까지 원소를 하나씩 담는다. result array에 값이 없을때만 원소를 담아 리턴하도록 했는데 이 부분에서 O(n^2)을 사용해 되게 비효율적이라는 생각이 들었다. 다른 사람들 풀이를 보니 comp.. 2022. 4. 14.
[프로그래머스] Swift 2020 카카오 괄호변환 문제 : https://programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 난이도 : level2 분석 : 주어진 요건을 잘 읽고 요구 사항대로 구현하는 문제였다. 이런 문제일수록 설계를 잘 하지 않으면 로직이 꼬이기 쉬워 어려운거 같다(나한테만 일지도 모른다 .. ㅎ) 1,2,3,4번을 차례대로 구현해주되 필요한건 함수로 분리해 작성하는것이 좋다 판단 들었다. 따라서 1번은 isEmpty로 검사하였다. 2번은 recursive.. 2022. 4. 14.
[프로그래머스] Swift 2018 카카오 뉴스 클러스터링 implementation 문제 : https://programmers.co.kr/learn/courses/30/lessons/17677 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브 programmers.co.kr 난이도 : level 2 분석 : 자카드 유사도를 구하는 문제로, 집합의 교집합, 합집합을 구하는 구현하는 문제였다. 다만 집합이지만 중복된 원소가 존재하는 다중 집합으로 구현해야 해서 Set 타입 대신 Array를 사용했다. Swift 코드 : // // main.swift // SOMA👩🏻‍💻 // // Created by Jo.. 2022. 4. 13.
[백준] 1049 Swift 기타줄 Greedy 문제 : https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 분석 : 단순한 구현 문제였다. 모든 브랜드 중에서 패키지와 단품으로 구매했을때 가격 비교를 통해 최소값을 choose 변수와 select에 저장한 뒤, n의 값을 줄여나가며 minPrice를 업데이트 한다. Swift 코드 : // // main.swift // SOMA👩🏻‍💻 // // Created by JoSoJeong on 2022/04/13. // import Foundat.. 2022. 4. 13.
[백준] Swift 20361 일우는 야바위꾼 implementation 문제 : https://www.acmicpc.net/problem/20361 20361번: 일우는 야바위꾼 첫째 줄에 N (3 ≤ N ≤ 200,000), X (1 ≤ X ≤ N), K (1 ≤ K ≤ 100,000)가 공백으로 구분되어 주어진다. 둘째 줄부터 K개의 줄에는 순서대로 바꾼 두 컵의 위치 Ai, Bi (1 ≤ Ai, Bi ≤ N, Ai ≠ Bi)가 공백 www.acmicpc.net 분석 : 구슬이 있는 위치를 true로 하는 배열을 만들까 하다가 위치를 변수로 업데이트 해줄수 있을 거 같아서 배열을 안쓰고 풀었다 ! Swift 코드 : // // main.swift // SOMA👩🏻‍💻 // // Created by JoSoJeong on 2022/04/12. // import Founda.. 2022. 4. 12.