Latest
-
멀티 스레드 VS 멀티 프로세스
멀티 프로세스란? 멀티 프로세스란 여러개의 프로세스가 작업을 처리하는 것을 의미한다. 이렇게 말하면 너무 단순해 보일 수 있으니 추가로 설명을 붙이자면 여러개의 프로세스가 작업을 병렬적으로 처리하는 것이다. 보다 구체적으로 말하자면 하나의 작업에 여러개의 프로세스가 달라붙어 작업을 처리하고 있는 것이다. 멀티 스레드란? 멀티 스레드란 하나의 프로세스에서 여러개의 스레드가 작업을 처리하는 것이다. 스레드란 하나의 프로세스 내부에서 작업을 수행하는 단위를 의미하기에 하나의 프로세스에서 여러개의 작업이 처리되고 있다고 파악해도 될 것이다. 보다 구체적으로 말하자면 하나의 작업을 위하여 붙은 프로세스 내부에서 여러개의 스레드가 작업을 병렬적으로 처리하고 있는 것이다. 멀티 프로세스와 멀티 스레드의 차이 그렇다면..
-
팩토리 메소드 패턴 - 1
[참고 영상] 코딩으로 학습하는 GoF의 디자인 패턴 강의 - 대시보드 | 인프런 (inflearn.com) 코딩으로 학습하는 GoF의 디자인 패턴 강의 - 인프런 디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할 www.inflearn.com [학습 목표] 팩토리 메소드 패턴의 정의에 대해서 배우고 이를 실제 코드를 사용해서 추후에 프로젝트에서 응용을 할 수 있게 연습을 해보자 [팩토리 메소드 패턴이란 무엇인가?] 팩토리 메소드 패턴이란 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성..
-
[C++] 귤 고르기
[문제] 코딩테스트 연습 - 귤 고르기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 가장 많이 나온 종류의 귤부터 골랐을 때 k 숫자가 되기까지 총 몇종류의 귤을 고르는지 파악하는 문제이다. map과 같은 딕셔너리를 사용하면 쉽게 풀 수가 있다. [회고] . [코드] #include #include #include #include #include using namespace std; int solution(int k, vector tangerine) { int answer = 0; ..
-
[Swift] 짝지어 제거하기
[문제] 코딩테스트 연습 - 짝지어 제거하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 스택의 성질을 사용하여 풀자. 만일 반복문을 통해 2개가 연속적으로 나오는게 없어질때까지 돌린다면 100만번을 99만번 돌릴지도 모르고 해당 문제는 시간 초과로 이어질 것이다. 그렇기에 스택을 사용해서 처음부터 끝까지 가면서 마지막에 넣어진 문자와 같다면 없애고 마지막에 해당 스택에 아무것도 없다면 1 있다면 0을 출력하자. [회고] . [코드] import Foundation func solu..
-
[Swift] 피보나치 수
[문제] 코딩테스트 연습 - 피보나치 수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 피보나치 수를 구하는 문제이다. 주의해야 할 점은 재귀를 사용해서 풀게 될 경우 시간초과가 날 수 있기에 반복문을 사용해서 DP를 이용해 풀어야 한다는 것이다. [회고] . [코드] func solution(_ n:Int) -> Int { var answer:Int = 0 var arr = Array(repeating: 0, count: 100001) arr[0] = 0 arr[1] = 1 for ..
-
[Swift] 다음 큰 숫자
[문제] 코딩테스트 연습 - 다음 큰 숫자 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 주어진 숫자와 이진법으로 만들었을때 1의 수가 같은 가장 작은 수를 반환하는 함수를 만드는 문제이다. 이진법에서 1의 숫자를 세는 binaryCheck 함수, n과 현재 숫자의 1의 수가 같은지 확인해주는 isCheck 함수, 그리고 n + 1부터 100만까지 돌아가는 반복문을 통하여 문제를 풀 수 있다. [회고] 프로그래머스 기본 코드가 var answer:Int = 0 이 아니라 answer:..
-
[C++] 다음 큰 숫자
[문제] https://school.programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 이진법으로 만들때 n의 1이 나오는 값과 n보다 큰 값 중 해당 조건을 만족하는 가장 작은 값을 파악하는 문제이다. level2치고 쉬웠던 문제. 코드를 보면 이해가 바로 될 듯하다. [회고] . [코드] #include #include #include using namespace std; int binaryCheck(int n){ int answer = 0; while(n..
-
[코드트리 챌린지] 가장 짧은 부분합
[실력진단 테스트] [문제] https://www.codetree.ai/missions/8/problems/shortest-subtotal?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai [문제 풀이] 투 포인터를 이용한 기본적인 문제이다. start 포인트와 end 포인트를 두고 start가 n이 되기 전까지 혹은 end가 해당 범위를 벗어나기 전까지 돌리면서 가장 짧아지는 거리를 파악하자. [회고] . [코드] #include #include #include using namesp..
-
[코드트리 챌린지] 연속되는 수
[실력진단 테스트] [문제] https://www.codetree.ai/training-field/search/problems/continuous-number?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai [문제 풀이] 완전탐색을 이용해서 임의의 숫자 k를 선택했을 때 해당 숫자를 제거하고 봤을때 연속으로 나오는 숫자의 최대 길이를 구하는 문제이다. 해당 문제에서 주의할점은 모두 같은 숫자를 주어질 경우 0이 나온다는 것이다. 그러니 만일 모든 숫자가 같다면 0이 나오게 세팅을 하고..
-
[코드트리 챌린지] 가장 많은 데이터
[실력진단 테스트] [문제] https://www.codetree.ai/missions/8/problems/most-data?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai [문제 풀이] 딕셔너리를 이용해서 넣어진 색깔의 최대값을 구하는 문제이다. map을 이용해서 쉽게 풀수가 있따. [회고] . [코드] #include #include #include using namespace std; int main() { unordered_map mp; int n; cin>>n; int max..
-
[코드트리 챌린지] 정수 사각형 최소 합
[실력진단 테스트] [문제] https://www.codetree.ai/missions/2/problems/minimum-sum-path-in-square?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai [문제 풀이] (1,N) 에서 (N,1) 로 이동을 할 때 거쳐간 숫자의 최소합을 구하는 문제이다. 이동은 왼쪽 혹은 밑으로만 가능하다. 범위가 100 * 100이기 때문에 이를 모두 완전탐색으로 구하게 되면 2 ^ 100승이 넘어가는 숫자가 나오게 되므로 시간초과에 걸리게 된다. 그..
-
[Swift] 로또의 최고 순위와 최저 순위
[문제] 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 딕셔너리를 이용해서 로또 맞춘 숫자와 순위를 지정해두고 lottos 안에 0이나 해당 숫자가 있으면 최고 숫자를 올리고 lottos 안에 해당 숫자가 있을때만 낮은 숫자를 올린다. 마지막에 answer 안에 딕셔너리를 이용해 최고 숫자의 순위, 최저 숫자의 순위를 넣어주자. [회고] var arr = [1,2,3,4,5,6] arr.contains(1) = true contains..
-
[Swift] 대충 만든 자판
[문제] 코딩테스트 연습 - 대충 만든 자판 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 딕셔너리를 만들어서 keymap을 방문하면서 최소로 몇번째로 누를수 있는지를 체크해두자. 만일 딕셔너리 안에 없는 문자라면 -1을 answer에 넣어주자. [회고] 스위프트는 딕셔너리 기본값이 초기화가 되어 있지 않아서 알고리즘 풀기에는 쉽지 않은 언어이다. 다만 프레임워크나 개발쪽에서는 nil값등이 있는 것이 나은걸 보면 익숙해져야 하는게 맞는듯. [코드] import Foundation fu..
-
[Swift] 추억 점수
[문제] 코딩테스트 연습 - 추억 점수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 딕셔너리를 이용해서 쉽게 풀 수 있는 문제이다. 딕셔너리를 만들어 name에 yearning을 매칭시켜주고 photo를 방문하면서 총 숫자가 몇이 나오는지를 answer에 저장해주자. [회고] . [코드] import Foundation func solution(_ name:[String], _ yearning:[Int], _ photo:[[String]]) -> [Int] { var answer =..
-
[Swift] 정수 내림차순으로 배치하기
[문제] 코딩테스트 연습 - 정수 내림차순으로 배치하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 숫자 -> 배열 정렬-> 숫자를 요구하는 문제이다. arr 배열을 만들어서 n을 순서대로 넣고 이후 arr.sort() { return $0 > $1 } 을 이용해 내림차순 정렬을 해주고 해당 내용들을 다시 answer에 넣어주자. [회고] 한줄 코딩이 가능한걸 보고 아직 갈 길이 멀었다고 느꼈다. 좀 더 정진하자. [코드] func solution(_ n:Int64) -> Int64..
-
[Swift] 정수 제곱근 판별
[문제] 코딩테스트 연습 - 정수 제곱근 판별 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] sqrt를 이용해서 쉽게 풀수가 있는 문제이다. sqrt(n)과 Double(Int(sqrt(n))이 같다면 이는 곧 정수와 실수형이 같은거니 정수 제곱근이 존재한다는 거고 그럴경우 해당 숫자의 + 1의 제곱을 반환해주자. [회고] 타입캐스팅 때문에 많이 헤맸던 문제. 타입캐스팅은 언제나 주의하자. [코드] import Foundation func solution(_ n:Int64) -> In..
-
[Swift] 문자열 내 p와 y의 개수
[문제] 코딩테스트 연습 - 문자열 내 p와 y의 개수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] p나 P 그리고 y나 Y를 더해봤을때 둘의 숫자가 같으면 true 아니면 false를 반환하자. 두개의 변수 pCount와 yCount를 만들어서 s를 돌면서 해당 알파벳들을 더해주고 마지막에 같은지 확인해주자. [회고] . [코드] import Foundation func solution(_ s:String) -> Bool { var ans:Bool = false var pCount..
-
[Swift] 문자열을 정수로 바꾸기
[문제] 코딩테스트 연습 - 문자열을 정수로 바꾸기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 처음에 부호가 - 이거나 + 라면 해당 문자열을 음수나 양수로 반환하는 문제이다. 1. index 1부터 마지막까지를 Range로 만들어서 substring으로 만들어 주고 처음이 + 라면 해당 숫자를 - 라면 * -1 을 아니라면 그냥 S 문자열을 반환해주자. 2. Swift는 문자열을 Int로 바꿀때 -나 +까지 포함해서 음수인지 정수인지 판별해 줄 수 있다. 그냥 Int(s)!로 반..
-
[Swift] 자연수 뒤집어 배열로 만들기
[문제] 코딩테스트 연습 - 자연수 뒤집어 배열로 만들기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] n이 0이 되기 전까지 나눠주면서 해당 위치에서 % 10의 값을 answer 배열에 넣어주자. [회고] . [코드] func solution(_ n:Int64) -> [Int] { var answer = [Int]() var cnt = n while cnt > 0 { answer.append(Int(cnt % 10)) cnt /= 10 } return answer }
-
[Swift] 자릿수 더하기
[문제] 코딩테스트 연습 - 자릿수 더하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] n이 0이 되기 전까지 계속해서 10씩 나눠주면서 %10의 값을 더해주자. [회고] . [코드] import Foundation func solution(_ n:Int) -> Int { var answer:Int = 0 var cnt = n while cnt > 0 { answer += cnt % 10 cnt /= 10 } return answer }
SwiftUI
-
[SwiftUI] How to use ContextMenu in SwifUI
[참고 영상] https://youtu.be/3jjQ6WASGIw [학습 목표] ContextMenu란 카드나 버튼을 꾹 눌렸을때 해당 버튼이나 카드에서 추가 옵션이 뜨면서 수정이나 삭제등의 기능이 보이는 메뉴이다. 이와 같은 ContextMenu를 SwiftUI에서 구현해서 사용해보자! [구현 방법] SwiftUI에서의 ContextMenu는 UIKit과는 다르게 이미 구현이 되어 있어서 매우 쉽게 사용이 가능하다. 그럼 이제부터 어떻게 ContextMenu를 사용하는지 살펴보자. 1. 우선은 ContextMenu를 사용하기 위해서 꾹 눌려야 하는 카드를 만들어보자. @State var backgroundColor: Color = Color(.blue) VStack(alignment: .leading,..
-
[SwiftUI] Task and .task in Swift - 3
[참고 영상] https://youtu.be/fTtaEYo14jI [학습 목표] 저번까지 Task의 우선순위와 Task란 무엇인지에 대해서 배워봤다. 하지만 실제로 앱이 실행된다면 유저들의 동작에 따라서 이전에 실행하던 동작이 그만둬야 될 때가 올것이다. 이러한 때를 대비하여 Task의 취소 방법에 대해서 배워보자! [구현 방법] 우선은 Task의 동작을 그만둬야 할 때가 어떠한 때인지에 대해서 배워보도록 하자. 현재 보고 있는 화면은 Navigation을 통해서 들어갔을 때 이미지가 뜨게 하는 화면이다. 현재 화면에서는 일부러 2초가 늦게 뜨게 하였지만 인터넷 서버의 문제 혹은 네트워크의 문제 등으로 인하여 이미지가 늦게 뜨게 되는 경우는 많을 것이다. 이와 같은 상황에서 유저들은 뒤로 갔다가 다시 오..
-
[SwiftUI] Task and .task in Swift - 2
[참고 영상] https://youtu.be/fTtaEYo14jI [학습 목표] 저번시간에는 Task란 무엇인지에 대해서 배워봤다. 이번시간에는 Task는 그렇다면 똑같이 동기화되어서 실행되는지 혹은 먼저 실행시키고 싶은 Task가 있다면 어떻게 해야 하는지에 대해서 배워보자. [구현 방법] Task의 경우에는 synchronous코드 이기 때문에 await이 asynchronous코드라고 하더라도 await의 완료를 기다리지 않고 위에 있는 Task가 실행 된 바로 다음에 다음 Task를 실행하기 때문이다. 이와 같은 Task에도 우선 순위가 있다. Task(priority: .high) { print("high : \(Thread.current) : \(Task.currentPriority)") } ..
-
[SwiftUI] Task and .task in Swift
[참고 영상] https://youtu.be/fTtaEYo14jI [학습 목표] 다른 종류들의 Task를 다루면서 Task가 무엇인지에 대해 알아보자! [구현 방법] 1. image를 가져오는 함수를 2가지를 만들어서 가져오는 방법. func fetchImage() async { do { guard let url = URL(string: "https://picsum.photos/200") else {return} let (data, _ ) = try await URLSession.shared.data(from: url, delegate: nil) self.image = UIImage(data: data) } catch { print(error.localizedDescription) } } func fet..
-
[SwiftUI] subscribe / receive 에 관해서
[학습 목표] 저번 시간에 main thread 와 global thread를 동시에 사용할시에 main thread가 global thread 안에 제대로 가지 않거나 global thread가 main thread 안에 제대로 들어가지 않는것을 볼 수가 있었다. 이러한 thread의 정보를 한 곳으로 입력받고 출력하는 방법에 대해 알아보자. [구현 방법] class DataManagerClass { @Published var dataArray = [String]() static let shared = DataManagerClass() private init() { getData() } func getData() { DispatchQueue.main.asyncAfter(deadline: .now() +..
UIKit
-
[코드베이스] 코디네이터 패턴
[참고 영상] https://youtu.be/SAZzcKvOvAE [학습 목표] 코디네이터 패턴이란 VC 사이의 데이터를 전달해주는 하나의 코디네이터를 만들어서 데이터 연결을 해당 코디네이터에서 해주는 것이다. 단순히 VC 끼리 데이터를 연결할때와 달리 해당 코디네이터를 통해서 함으로서 팀 프로젝트와 같이 협업을 해야할 때 데이터 연동이 직접 하는것보다 쉬워진다는 장점이 있다. 알아두면 꼭 한번은 쓸만한 패턴이므로 한번씩은 봐두자 [구현 방법] 1. 우선은 해당 스토리보드 환경을 코드베이스 환경으로 바꿔주자. (참고글 : 코드베이스로 구현) 2. 이제 VC A 와 VC B 를 만들어 줄 것이다. 단순히 버튼과 화면색깔만 있는 VC A class ViewController: UIViewController,..
-
Switch Case문에서 특정 조건들에서는 함수를 호출 안하기.
Switch Case문을 쓰면 특정 Case들에서만 함수를 호출 안하게 만들고 싶을 때가 있다. Swithc Case 문에서는 if 문 대신에 where 절을 사용하지만 이렇게 만들면 기본 구조가 보기 힘들어질 수 있기 때문에 다른 방식을 이용해서 해당 문제를 해결해보고자 하자. 1. 여기선 checkAlbumPermission이라는 함수를 실행하면 내부에 presentImagePicker를 실행하도록 만들었다. editPhotoButton // edit Photo Button을 누른다면 .tapPublisher .sink { [weak self] in self?.checkAlbumPermission { //checkAlbumPermission 실행 DispatchQueue.main.async {self..
-
[코드베이스] Custom PopUp Modal Animation
[참고 영상] https://youtu.be/u6TpJrZNuPU [학습 목표] 모달뷰를 사용할때 해당 뷰의 애니메이션 효과를 조정해보자. [구현 방법] 1. 팝업을 하기 위해서 뷰를 작성해보자. import Foundation import UIKit class Popup: UIView { fileprivate let titleLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.font = UIFont.systemFont(ofSize: 28, weight: .bold) //font 크기를 28로 변환 및 bold체 label.text = "1 credit" label.tex..
-
[코드베이스] Creating Share Sheet in App
[참고 영상] https://youtu.be/jxhq1_7HkJg [학습 목표] UIKit을 이용해 아이폰과 아이패드에서 각각 ShareSheet(UIActivityViewController)를 구현해 보자. [구현 방법] 1. 우선은 ShareSheet을 불려올 버튼을 만들도록 하자. import UIKit class ViewController: UIViewController { //UIButton 코드 버튼UI이기 때문에 크게 신경 쓸 부분은 없다. private let button: UIButton = { let button = UIButton() button.backgroundColor = .link button.setTitle("Tap Me", for: .normal) button.setTitl..
-
[UIKit][코드 베이스]CollectionView Context Menus
[참고 영상] https://youtu.be/a1Agazw2JxM [학습 목표] UIKit에서 코드베이스를 이용해서 ContextMenu를 만들어 보자! (해당 학습에서 쓰는 모든 이미지의 저작권은 각 이미지의 저작권자한테 있습니다.) [구현 방법] 1. 우선은 ContextMenu를 만들기 이전에 Collection View를 먼저 만들어보도록 하자. 1 - 1. asset에 원하는 이미지를 6개 넣고(만일 원한다면 추가로 더 넣거나 빼고 imageNames Array에서 1부터 이미지 넣은 숫자만큼으로 수정해주자.) 이름을 image숫자로 지정해주자. 1 - 2. 코드베이스를 활용해서 collectionview를 구현하자. import UIKit class ViewController: UIViewCo..
에러 회고
-
맥북에서 화면 기록 문제 발생
[문제 원인] 퀵 타임 플레이어를 사용해서 화면 기록을 하려고 하는데 오류가 발생하였다가 스크린샷에 넘기고 스크린샷에서는 커맨드 + 쉬프트 + 5 번을 누르면 밑에 있는 옵션이 0.3초만에 사라지는 문제로 화면 기록에 손을 대지 못하였다. [문제 파악] 2023년 3월정도로 기억하는데 맥북을 업데이트 하면서 설정에서 화면 보호기 쪽에도 들어가지 못하는 원인이 발생하였다. 이 참에 찾아보니 설정에서 스크린 타임과 화면 보호기 둘 다 들어가면 0.3초만에 내용이 사라지는 문제가 발생했다.(요새 윈도우도 이런 오류는 생기지 않는다....ㅂㄷㅂㄷ) 아마 이와 같은 모든 화면에 관련된 것들에 오류가 발생해서 퀵 타임 플레이어에서는 화면 녹화를 못하고 스크린 샷에서는 밑에 있는 옵션이 바로 위에 있는 스크린 타임이..
-
UNITY_IOS 인식 문제
[문제 발생] Unity에서 iOS 네이티브 코드를 이용하는 강의를 듣고 구현을 하였지만. 버튼은 제대로 눌리지만 Alert 창은 나오지 않고 Log 창에 ShowAlert is only supported on iOS platform 만 계속해서 뜨는 문제가 발생하였다. [문제 해결 과정] 문제 원인을 찾아보니 iOSPlugin.cs 에 내부에 있는 #if UINTY_IOS [DllImport("__Internal")] private static extern void _ShowAlert(string title, string message); public static void ShowAlert(string title, string message) { Debug.Log("ShowAlert 이 제대로 실행되고..
-
앱 버전 1.09 -> 1.1 버전 오류문제
[문제 발생] 저번주에 팀원들이 마지막 기능이 빠졌다고 1.1이 아니라 1.09로 우선 업데이트를 하고 이번주에 1.1로 업데이트를 하자고 했는데 갑자기 오류가 발생하였다. [문제 해결 과정] 문제의 원인으로 뜬 내용이 Asset 에러라서 asset을 바꿔야 하나 했는데 기존 버전과 동일한 아이콘들이었기에 해당 문제가 아니라 생각해였고 저번에 업데이트를 하는 도중에 1.09로 바로 인식이 안되고 1.9였다가 1.09로 바뀌었던 부분에 주목을해 혹시나 싶어서 1.10으로 바꿨더니 해결이 되었다. *자세히는 모르고 어디까지나 개인적인 추측인데 앱 뒤에 있는 소수점 내용이 소수가 아니라 앞의 버전하고 따로 Int형으로 받아서 9보다 이전인 1을 인식하지 못해서 발생한 문제 같다. 즉, 1.09라는 소수가 아니..
-
앱 스토어에 ipad 전용 앱 올리는 방법
[문제] 앱 스토어에 ipad 전용 앱을 어떻게 올려야 하는지 알아 보자! [해결 방법] 결론부터 말하자면 앱 스토어에 올리는 도중에 해결을 하는 부분이 아니라 Xcode 내부에서 해결을 해야 한다.(앱 스토어에서 가능할 지도 모르지만 해당 방법은 아직 내가 모른다.) 1. 만들고 있는 프로젝트의 설정 쪽으로 들어가보자. 그렇다면 이와 같이 설정이 되어있는게 보일텐데 해당 부분을 이와 같이 바꿔주자. 타겟이 2개가 있다면 타겟2개에서 모두 ipad만을 놨두고 지워주자. 2. 프로젝트의 Build Settings 내부로 들어가주자. Build Settings에서 우측 위에 device라고 치면 아래와 같이 iphone으로 설정이 되어 있는 모습이 보일 거다. 그러면 해당 부분에서 iphone 부분을 위와 ..
-
Signing for "gRPC-C++-gRPCCertificates-Cpp" 에러에 관해서
[문제 발생 환경] 시뮬레이터에서는 문제가 없었던 앱이 아이패드로 돌려보니 Signing for "gRPC-C++-gRPCCertificates-Cpp" requires a development team 에러가 발생하였다. 프로젝트에서 provisioning을 한 상황이었고 내 아이패드를 등록한 상태에 팀원의 인증서를 가져온 상태였다. [문제 해결 과정] 우선은 구글링을 통하여 문제를 해결할려고 하였다. 구글링 결과 1. keychain 인증서가 로그인이 아니라 시스템에 있어서 발생한 문제이다. 2. keychain 인증서에서 접근 제어를 언제나 허용으로 바꾸라. 1번과 2번을 계속해서 하다가 실패하였고 왜 해결을 못하였는지 알게 되었다. [문제 해결 방법] 우선 구글링의 결과가 어긋나지는 않앗다. 다만..
-
Unable to process request - PLA Update available 에러에 관하여
[문제 발생 환경] 기존에 썼던 iphone이 아니라 ipad로 연결하니 Unable to process request - PLA Update available. 와 Provisioning profile "iOS Team Provisioning Profile: *" doesn't include the currently selected device 의 2가지 오류가 발생하였다. [문제 해결 과정] 1. Automatically manage signing 을 클릭하니 괜찮아진다는 말이 있어서 새로 클릭. 2. Xcode 종료 후 재시작 3. iPad 다시 연결 iPhone에서는 문제가 없지만 iPad에서는 문제가 있었기에 인증 과정에서의 문제라는 것은 추론이 되었지만 어떻게 하는지 몰랐었고 팀원의 도움으로 ..
프로젝트 회고
-
clean code를 위해서 주석을 안 쓰는 것이 언제나 좋은가?
이번 프로젝트에서 clean code를 지향하면서 주석을 안 적으면서 진행을 하였다. 다만, 주석이 없다 보니 코드 리뷰를 하는데 시간이 더 걸리고 pr을 하기가 힘들어지는 결과를 낳았다. 클린코드에서는 주석을 필요악이라고 하지만 좋은 주석의 경우도 동시에 설명을 해주고 있다. 1. 정보를 제공하는 주석 2. 의도를 설명하는 주석 3. 의미를 명료하게 밝히는 주석 4. 결과를 경고하는 주석 5. TODO 주석 6. 중요성을 강조하는 주석 등은 좋은 주석이라고 한다. 주석을 없애는 것을 목표로 해야 한다고 하지만 프로젝트의 초반에 주석을 써주는 것이 오히려 프로그래머들간의 의사소통에 더 효율적인 경우도 있다고 생각한다. 이번 프로젝트에서 서버에서 이미지를 받아오는 부분을 다른 사람이 쓰는 것을 쓰다보니 제..
-
언제 class보다 struct를 쓰는 것이 좋은가?
우리들은 class는 힙 메모리에 저장되고 struct는 스택 메모리에 저장되며 class는 값을 참조하고 struct는 값을 복사한다는 것을 알고 있다. struct의 경우는 그래서 class보다 속도가 빠르다는 것을 알고 있는데 그렇다면 코드를 짤 때 언제 struct를 쓰는 것이 과연 올바른 행위인지 자세히 알기가 힘들다. 프로젝트를 하면서 이와 같은 class와 struct에 대해서 고민이 있었고 애플의 가이드라인에 이와 같은 고민을 해결하는 문장을 볼 수가 있었다. 1. 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때 2. 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때 3. 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때 4. 다른 타입으로부터 상..
-
아카이브를 사용한 앱 버전 업데이트
현재 버젼 1.0에서 1.09로 앱을 업데이트 하기 위하여 Xcode에서 아카이브 기능을 사용하였다.(처리중에 1.09를 App store 측에서 1.9로 읽었다가 다시 1.09로 읽었다. 해당 오류 원인은 모르겠음.) https://apps.apple.com/kr/app/%EB%84%A4%EB%AA%A8%EB%84%A4%EB%AA%A8/id6444035444 네모네모 [아이패드를 이용하여 롤링페이퍼의 아날로그 감성을 업그레이드 하세요.] - 사진과 스티커를 활용해서 친구들과 함께 롤링페이퍼를 꾸며보세요. - 특색있는 롤링페이퍼 템플릿을 이용하여 apps.apple.com 우선, 저번과 다르게 몇주간의 사이에 GitHub를 연동시키기 위한 Xcode cloub beta 버젼이 열렸기에 Github를 ..
-
디자이너와의 협업에서 얻은 것은 무엇인가?
실제 협업에서는 주니어 개발자, 시니어 개발자, 주니어 디자이너, 시니어 디자이너가 같이 협업을 하기 때문에 주니어 개발자가 만약 개발을 완성하지 못하더라도 시니어 개발자가 디자이너들의 요구를 최대한 따라주기에 주니어 개발자가 성장을 하며 나중에 디자이너들의 요구에 부응해 줄 수가 있다. 하지만 아카데미에서 시니어 개발자가 없이 내가 혼자서 디자이너의 요구를 들어줄려다 보니 구현하지 못하는 부분들이 많았고 힘들었지만 동시에 디자이너와의 협업을 통해서 얻은 부분에 대해서 써본다. 1. 디자이너의 요구를 잘 파악해야 한다. 디자이너가 Label, Button, Text 등을 만들어 달라고 요구하는것은 단순히 해당 부분을 만들고 끝나는 것이 아니다. 해당 버튼의 크기와 버튼의 위치등 우리가 보기에는 기능만 구..
-
아이패드앱을 동시에 아이폰에서 공유가 되게 만들 것인가?
[고민] 아이패드 앱을 만들때 아이폰에서도 사용이 가능하게 확장성을 부여할 것인가? [각각의 장단점] 아이패드만을 생각한다면 pencilkit 같은 아이패드에서 사용할 수 있는 기능이 생긴다. 만일 아이폰에서도 사용이 가능하게 만든다면 연동을 해 동시에 하나의 앱으로 공유가 가능해지므로 아이패드를 기다릴 필요가 없다. 어느 한 쪽이 무조건 정답은 아니기에 최대한 고민해보자.
알고리즘
-
[C++] 귤 고르기
[문제] 코딩테스트 연습 - 귤 고르기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 가장 많이 나온 종류의 귤부터 골랐을 때 k 숫자가 되기까지 총 몇종류의 귤을 고르는지 파악하는 문제이다. map과 같은 딕셔너리를 사용하면 쉽게 풀 수가 있다. [회고] . [코드] #include #include #include #include #include using namespace std; int solution(int k, vector tangerine) { int answer = 0; ..
-
[Swift] 짝지어 제거하기
[문제] 코딩테스트 연습 - 짝지어 제거하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 스택의 성질을 사용하여 풀자. 만일 반복문을 통해 2개가 연속적으로 나오는게 없어질때까지 돌린다면 100만번을 99만번 돌릴지도 모르고 해당 문제는 시간 초과로 이어질 것이다. 그렇기에 스택을 사용해서 처음부터 끝까지 가면서 마지막에 넣어진 문자와 같다면 없애고 마지막에 해당 스택에 아무것도 없다면 1 있다면 0을 출력하자. [회고] . [코드] import Foundation func solu..
-
[Swift] 피보나치 수
[문제] 코딩테스트 연습 - 피보나치 수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 피보나치 수를 구하는 문제이다. 주의해야 할 점은 재귀를 사용해서 풀게 될 경우 시간초과가 날 수 있기에 반복문을 사용해서 DP를 이용해 풀어야 한다는 것이다. [회고] . [코드] func solution(_ n:Int) -> Int { var answer:Int = 0 var arr = Array(repeating: 0, count: 100001) arr[0] = 0 arr[1] = 1 for ..
-
[Swift] 다음 큰 숫자
[문제] 코딩테스트 연습 - 다음 큰 숫자 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 주어진 숫자와 이진법으로 만들었을때 1의 수가 같은 가장 작은 수를 반환하는 함수를 만드는 문제이다. 이진법에서 1의 숫자를 세는 binaryCheck 함수, n과 현재 숫자의 1의 수가 같은지 확인해주는 isCheck 함수, 그리고 n + 1부터 100만까지 돌아가는 반복문을 통하여 문제를 풀 수 있다. [회고] 프로그래머스 기본 코드가 var answer:Int = 0 이 아니라 answer:..
-
[C++] 다음 큰 숫자
[문제] https://school.programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 이진법으로 만들때 n의 1이 나오는 값과 n보다 큰 값 중 해당 조건을 만족하는 가장 작은 값을 파악하는 문제이다. level2치고 쉬웠던 문제. 코드를 보면 이해가 바로 될 듯하다. [회고] . [코드] #include #include #include using namespace std; int binaryCheck(int n){ int answer = 0; while(n..
-
[코드트리 챌린지] 가장 짧은 부분합
[실력진단 테스트] [문제] https://www.codetree.ai/missions/8/problems/shortest-subtotal?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai [문제 풀이] 투 포인터를 이용한 기본적인 문제이다. start 포인트와 end 포인트를 두고 start가 n이 되기 전까지 혹은 end가 해당 범위를 벗어나기 전까지 돌리면서 가장 짧아지는 거리를 파악하자. [회고] . [코드] #include #include #include using namesp..
-
[코드트리 챌린지] 연속되는 수
[실력진단 테스트] [문제] https://www.codetree.ai/training-field/search/problems/continuous-number?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai [문제 풀이] 완전탐색을 이용해서 임의의 숫자 k를 선택했을 때 해당 숫자를 제거하고 봤을때 연속으로 나오는 숫자의 최대 길이를 구하는 문제이다. 해당 문제에서 주의할점은 모두 같은 숫자를 주어질 경우 0이 나온다는 것이다. 그러니 만일 모든 숫자가 같다면 0이 나오게 세팅을 하고..
-
[코드트리 챌린지] 가장 많은 데이터
[실력진단 테스트] [문제] https://www.codetree.ai/missions/8/problems/most-data?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai [문제 풀이] 딕셔너리를 이용해서 넣어진 색깔의 최대값을 구하는 문제이다. map을 이용해서 쉽게 풀수가 있따. [회고] . [코드] #include #include #include using namespace std; int main() { unordered_map mp; int n; cin>>n; int max..
-
[코드트리 챌린지] 정수 사각형 최소 합
[실력진단 테스트] [문제] https://www.codetree.ai/missions/2/problems/minimum-sum-path-in-square?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai [문제 풀이] (1,N) 에서 (N,1) 로 이동을 할 때 거쳐간 숫자의 최소합을 구하는 문제이다. 이동은 왼쪽 혹은 밑으로만 가능하다. 범위가 100 * 100이기 때문에 이를 모두 완전탐색으로 구하게 되면 2 ^ 100승이 넘어가는 숫자가 나오게 되므로 시간초과에 걸리게 된다. 그..
-
[Swift] 로또의 최고 순위와 최저 순위
[문제] 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 딕셔너리를 이용해서 로또 맞춘 숫자와 순위를 지정해두고 lottos 안에 0이나 해당 숫자가 있으면 최고 숫자를 올리고 lottos 안에 해당 숫자가 있을때만 낮은 숫자를 올린다. 마지막에 answer 안에 딕셔너리를 이용해 최고 숫자의 순위, 최저 숫자의 순위를 넣어주자. [회고] var arr = [1,2,3,4,5,6] arr.contains(1) = true contains..
-
[Swift] 대충 만든 자판
[문제] 코딩테스트 연습 - 대충 만든 자판 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 딕셔너리를 만들어서 keymap을 방문하면서 최소로 몇번째로 누를수 있는지를 체크해두자. 만일 딕셔너리 안에 없는 문자라면 -1을 answer에 넣어주자. [회고] 스위프트는 딕셔너리 기본값이 초기화가 되어 있지 않아서 알고리즘 풀기에는 쉽지 않은 언어이다. 다만 프레임워크나 개발쪽에서는 nil값등이 있는 것이 나은걸 보면 익숙해져야 하는게 맞는듯. [코드] import Foundation fu..
-
[Swift] 추억 점수
[문제] 코딩테스트 연습 - 추억 점수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 딕셔너리를 이용해서 쉽게 풀 수 있는 문제이다. 딕셔너리를 만들어 name에 yearning을 매칭시켜주고 photo를 방문하면서 총 숫자가 몇이 나오는지를 answer에 저장해주자. [회고] . [코드] import Foundation func solution(_ name:[String], _ yearning:[Int], _ photo:[[String]]) -> [Int] { var answer =..
-
[Swift] 정수 내림차순으로 배치하기
[문제] 코딩테스트 연습 - 정수 내림차순으로 배치하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 숫자 -> 배열 정렬-> 숫자를 요구하는 문제이다. arr 배열을 만들어서 n을 순서대로 넣고 이후 arr.sort() { return $0 > $1 } 을 이용해 내림차순 정렬을 해주고 해당 내용들을 다시 answer에 넣어주자. [회고] 한줄 코딩이 가능한걸 보고 아직 갈 길이 멀었다고 느꼈다. 좀 더 정진하자. [코드] func solution(_ n:Int64) -> Int64..
-
[Swift] 정수 제곱근 판별
[문제] 코딩테스트 연습 - 정수 제곱근 판별 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] sqrt를 이용해서 쉽게 풀수가 있는 문제이다. sqrt(n)과 Double(Int(sqrt(n))이 같다면 이는 곧 정수와 실수형이 같은거니 정수 제곱근이 존재한다는 거고 그럴경우 해당 숫자의 + 1의 제곱을 반환해주자. [회고] 타입캐스팅 때문에 많이 헤맸던 문제. 타입캐스팅은 언제나 주의하자. [코드] import Foundation func solution(_ n:Int64) -> In..
-
[Swift] 문자열 내 p와 y의 개수
[문제] 코딩테스트 연습 - 문자열 내 p와 y의 개수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] p나 P 그리고 y나 Y를 더해봤을때 둘의 숫자가 같으면 true 아니면 false를 반환하자. 두개의 변수 pCount와 yCount를 만들어서 s를 돌면서 해당 알파벳들을 더해주고 마지막에 같은지 확인해주자. [회고] . [코드] import Foundation func solution(_ s:String) -> Bool { var ans:Bool = false var pCount..
-
[Swift] 문자열을 정수로 바꾸기
[문제] 코딩테스트 연습 - 문자열을 정수로 바꾸기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 처음에 부호가 - 이거나 + 라면 해당 문자열을 음수나 양수로 반환하는 문제이다. 1. index 1부터 마지막까지를 Range로 만들어서 substring으로 만들어 주고 처음이 + 라면 해당 숫자를 - 라면 * -1 을 아니라면 그냥 S 문자열을 반환해주자. 2. Swift는 문자열을 Int로 바꿀때 -나 +까지 포함해서 음수인지 정수인지 판별해 줄 수 있다. 그냥 Int(s)!로 반..
-
[Swift] 자연수 뒤집어 배열로 만들기
[문제] 코딩테스트 연습 - 자연수 뒤집어 배열로 만들기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] n이 0이 되기 전까지 나눠주면서 해당 위치에서 % 10의 값을 answer 배열에 넣어주자. [회고] . [코드] func solution(_ n:Int64) -> [Int] { var answer = [Int]() var cnt = n while cnt > 0 { answer.append(Int(cnt % 10)) cnt /= 10 } return answer }
-
[Swift] 자릿수 더하기
[문제] 코딩테스트 연습 - 자릿수 더하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] n이 0이 되기 전까지 계속해서 10씩 나눠주면서 %10의 값을 더해주자. [회고] . [코드] import Foundation func solution(_ n:Int) -> Int { var answer:Int = 0 var cnt = n while cnt > 0 { answer += cnt % 10 cnt /= 10 } return answer }
-
[Swift] 나머지가 1이 되는 수 찾기
[문제] 코딩테스트 연습 - 나머지가 1이 되는 수 찾기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 1부터 n까지 가면서 %를 했을때 1이 되면 해당 숫자를 반환하자. stride(from: start, through: end, by: 1) 해당 구문은 start부터 end까지 1씩 더하면서 가는 함수이다. swift에서 for문에 for i in 5...3 과 같은 경우가 생기면 에러가 일어나니 stride를 애용해주자. [회고] . [코드] import Foundation fu..
-
[Swift] 짝수와 홀수
[문제] 코딩테스트 연습 - 짝수와 홀수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 홀수면 Odd 짝수면 Even을 반환하자. 짝수라는 것은 %2 값이 0이라는 것이니 이를 이용하자. [회고] . [코드] func solution(_ num:Int) -> String { var answer: String = "" if num % 2 == 0 { answer = "Even" } else { answer = "Odd" } return answer }
SQL
-
[MySQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
[문제] 코딩테스트 연습 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] with절을 사용해서 문제를 풀었다. with절을 사용해서 조건에 해당되는 car_id가 넣어져있는 테이블을 생성하고 해당 테이블 안에 car_id가 있다면 '대여중' 아니라면 '대여 가능'을 출력하였다. [회고] with절은 처음 사용해봤는데 생각보다 어렵진 않았다. 앞으로도 많이 사용하도록 하자. [코드] WITH TBL AS (SELECT disti..
-
[MySQL] 조건에 맞는 사용자와 총 거래금액 조회하기
[문제] 코딩테스트 연습 - 조건에 맞는 사용자와 총 거래금액 조회하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] JOIN문을 이용해서 쉽게 풀 수가 있었다. 또한 TOTAL_SALES 같은 경우에는 조건에 맞다면 당연히 해당 값이 나올테니 굳이 어렵게 고민할 필요 없이 SUM을 이용해서 나타내면 된다. [회고] 서브쿼리를 쓸려다가 코드가 헷갈려져서 실패했다. 서브쿼리 연습을 더 하자. [코드] SELECT U.USER_ID, U.NICKNAME, SUM(B.PRICE) as TO..
-
[MySQL] 대여 기록이 존재하는 자동차 리스트 구하기
[문제] 코딩테스트 연습 - 대여 기록이 존재하는 자동차 리스트 구하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 서브쿼리를 사용하면 쉽게 풀리는 문제이다. CAR_TYPE = '세단' 이라는 조건을 만족하는 CAR_ID, 그리고 시작하는 시간이 10월이라는 조건만 파악을 하면 비교적 수월하게 풀리는 문제였다. [회고] JOIN을 사용할까도 고민했지만 서브쿼리에 약한 부분이 많아서 서브쿼리를 사용했다. [코드] SELECT DISTINCT CAR_ID FROM CAR_RENTAL_..
-
[MySQL] 조건에 맞는 사용자 정보 조회하기
[문제] 코딩테스트 연습 - 조건에 맞는 사용자 정보 조회하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] Concat과 서브쿼리를 이용하면 수월하게 풀리는 문제이다. 조건이 USED_GOODS_BOARD 에서 3번이상 쓴 사람을 조건에 맞게 출력하는 것이니 서브쿼리를 사용해서 조건을 걸어주고 해당 조건에 맞게 concat을 이용해서 출력을 시켜주자. [회고] 서브쿼리에 대해서 안 익숙했는데 문제를 풀면서 조금 더 익숙해진것 같다. 3문제만 더 풀자! [코드] SELECT USER_..
-
[MySQL] 조건에 부합하는 중고거래 상태 조회하기
[문제] 코딩테스트 연습 - 조건에 부합하는 중고거래 상태 조회하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 2022년 10월 5일에 제조된 물건의 Board_id, Writer_id, Title, Price, Status를 출력하자. 단, 이때 Status를 조건에 따라 3가지로 나누면 된다. CASE WHEN 컬럼 = '상태' THEN '표시할 이름' End '표시할 컬럼 이름' 해당 부분만 알면 쉽게 풀리는 문제다. [회고] CASE WHEN TEHN END '표시할 이름'..
-
[MySQL] 3월에 태어난 여성 회원 목록 출력하기
[문제] 코딩테스트 연습 - 3월에 태어난 여성 회원 목록 출력하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 조건에 따라서 SELECT만 하면 되는 문제였다. 난이도가 높지는 않았으나 DATE_FROMAT을 아는지 MONTH()를 아는지 등을 요구했던 문제. 만약 이를 몰랐다면 어떻게 출력해야하는지 찾아봐야 했을 것이다. [회고] DATE_FORMAT으로 출력구문에 맞춰야 했다. 처음에 이를 모르고 그냥 제출했다가 틀렸음. [코드] SELECT MEMBER_ID, MEMBER_N..
-
[MySQL] 조건에 맞는 도서와 저자 리스트 출력하기
[문제] https://school.programmers.co.kr/learn/courses/30/lessons/144854 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] 기본적인 JOIN을 사용한 문제이다. 다만, date_format을 사용해서 문제에서 요구하는 형태로 출력해야 하는 것에 대해서 주의하도록 하자. *추가적인 date_format 사용법은 mysql 사이트를 참고하도록 하자. https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-..
-
[MySQL] 오랜 기간 보호한 동물(1)
[문제] https://school.programmers.co.kr/learn/courses/30/lessons/59044 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] LEFT JOIN에 대해서 알아보도록 하자. 그림에서 보다시피 LEFT JOIN은 왼쪽 테이블을 기준으로 오른쪽 테이블을 조인하는 구문이다. 우리들은 오른쪽 테이블에서 NULL이고 A테이블에서는 있는 값을 찾아야 하니 그림 좌측에서 두번째 문법을 이용해서 풀어보도록 하자. [코드] SELECT INS.name, INS.DATETIME FROM ANIMAL_INS INS LE..
-
[MySQL] 있었는데요 없었습니다
[문제] https://school.programmers.co.kr/learn/courses/30/lessons/59043 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [문제 풀이] JOIN을 활용한 기본적인 문법을 물어보는 문제이다. 보호 시작일보다 입양일이 더 빠른 동물을 조회하기 위해서 JOIN과 WHERE를 섞어서 사용해주자. [코드] SELECT INS.ANIMAL_ID, INS.NAME FROM ANIMAL_INS INS JOIN ANIMAL_OUTS OUTS ON INS.ANIMAL_ID = OUTS.ANIMAL_ID WHERE INS.DA..
-
[MySQL] Top Earners
[문제] Top Earners | HackerRank Top Earners | HackerRank Find the maximum amount of money earned by any employee, as well as the number of top earners (people who have earned this amount). www.hackerrank.com [문제 풀이] MONTHS * SALARY의 최댓값과 가장 많이 버는 사람이 복수라면 해당 사람의 숫자를 출력하라는 문제이다. MONTHS * SALARY 를 그룹으로 묶은 뒤에 order by 와 limit를 사용해서 풀어보도록 하자. GROUP BY를 이용해서 소득으로 사람들을 나눌 수 있으니 가장 많이 버는 그룹만 count를 통해서 몇..
-
[MySQL] Ollivander's Inventory
[문제] Ollivander's Inventory | HackerRank Ollivander's Inventory | HackerRank Help pick out Ron's new wand. www.hackerrank.com [문제 풀이] 문제가 요구하는 것을 정확히 파악하지 못해서 헤매어서 풀었던 문제. 문제에서 요구하는 것은 1. is_evil 은 0이어야 한다. 2. 만약 age와 power가 같다면 coins_needed가 작은 값만을 가져와야 한다. 1번은 바로 이해가 되었는데 2번을 바로 파악을 못해서 헤맸었다. JOIN을 쓰고 SELECT 부분에서 한번 더 JOIN 으로 power와 age가 일치하고 evil은 0인 최소 값의 coins_needed를 가져오자. 밑에서 A2.power = A..
-
[MySQL] The Report
[문제] The Report | HackerRank The Report | HackerRank Write a query to generate a report containing three columns: Name, Grade and Mark. www.hackerrank.com [문제 풀이] SQL에서 IF절에 대해서 배워보도록 하자. IF(조건, 참일때 값, false일 때 값) if문을 이용해서 GRADE가 8이상이면 name을 이하면 null을 출력해주자. [코드] SELECT IF(GRADE>=8,NAME,NULL), GRADE, MARKS FROM GRADES, STUDENTS WHERE MARKS >= MIN_MARK AND MARKS
-
[MySQL] Average Population of Each Continent
[문제] Average Population of Each Continent | HackerRank Average Population of Each Continent | HackerRank Query the names of all continents and their respective city populations, rounded down to the nearest integer. www.hackerrank.com [문제 풀이] FLOOR와 ROUND의 차이 그리고 JOIN을 사용한 상태에서 GROUP BY에 관한 문제이다. ROUND는 반올림을 할 수 있는 함수이며 FLOOR는 내림을 하는 함수이다. 해당 문제에서는 가장 가까운 정수로 내려달라고 했으니 FLOOR를 사용하도록 하자. 또한, JOIN을 ..
-
[MySQL] Population Census
[문제] Population Census | HackerRank Population Census | HackerRank Query the sum of the populations of all cities on the continent 'Asia'. www.hackerrank.com [문제 풀이] 이제 JOIN에 대해서 알아볼 때가 왔다! 우선 JOIN을 사용하기 위하여 두 테이블을 연결하는 컬럼이 무엇인지 알아보면 Note: CITY.CountryCode and COUNTRY.Code are matching key columns. CITY.CountryCode 와 COUNTRY.Code가 일치하니 두개의 컬럼을 연결고리로 테이블을 연결시키자. JOIN 테이블 A(부를것) ON 연결고리 우리는 CITY를 ..
-
[MySQL] Higher Than 75 Marks
[문제] Higher Than 75 Marks | HackerRank Higher Than 75 Marks | HackerRank Query the names of students scoring higher than 75 Marks. Sort the output by the LAST three characters of each name. www.hackerrank.com [문제 풀이] 우측에서 3가지 문자를 파악해서 정렬하자. RIGHT(컬럼,숫자) 해당 구절은 컬럼의 우측 순서만큼을 뽑아 주는 구절이다. ORDER BY와 조합을 해서 문제를 풀어보자. [코드] SELECT NAME FROM STUDENTS WHERE MARKS > 75 ORDER BY RIGHT(NAME,3) ASC, ID ASC
-
[MySQL] Weather Observation Station 12
[문제] Weather Observation Station 12 | HackerRank Weather Observation Station 12 | HackerRank Query an alphabetically ordered list of CITY names not starting and ending with vowels. www.hackerrank.com [문제 풀이] Weather Observation Station 11 문제와 비슷한 유형이다. and 와 or의 차이점에 대해서 파악하고 가자. [코드] SELECT DISTINCT CITY FROM STATION WHERE (CITY NOT LIKE 'a%' and CITY NOT LIKE 'e%' and CITY NOT LIKE 'i%' and CI..
-
[MySQL] Weather Observation Station 11
[문제] Weather Observation Station 11 | HackerRank Weather Observation Station 11 | HackerRank Query a list of CITY names not starting or ending with vowels. www.hackerrank.com [문제 풀이] Weather Observation Station 8 번 문제를 응용해서 풀어보자. 단, Not like 를 사용하니 기존 방식과 and 와 or 의 위치가 살짝씩 수정이 된다. [코드] SELECT DISTINCT CITY FROM STATION WHERE (CITY NOT LIKE 'a%' and CITY NOT LIKE 'e%' and CITY NOT LIKE 'i%' and ..
-
[MySQL] Weather Observation Station 10
[문제] Weather Observation Station 10 | HackerRank Weather Observation Station 10 | HackerRank Query a list of CITY names not ending in vowels. www.hackerrank.com [문제 풀이] Weather Observation Station 9에서 풀었던 방식을 응용하자! [코드]
-
[MySQL] Weather Observation Station 9
[문제] Weather Observation Station 9 | HackerRank Weather Observation Station 9 | HackerRank Query an alphabetically ordered list of CITY names not starting with vowels. www.hackerrank.com [문제 풀이] 컬럼 LIKE '문자%' 를 이용해서 해당 문자로 시작하는 단어를 찾을 수 있으니 모음으로 시작하는 단어를 모두 찾고 제외를 시켜주자. 컬럼 NOT LIKE '문자%' 를 이용하면 해당 문자로 시작하는 문자가 아닌 문자를 고를 수가 있다. [코드] SELECT DISTINCT CITY FROM STATION WHERE CITY NOT LIKE 'a%' and C..
-
[MySQL] Weather Observation Station 8
[문제] Weather Observation Station 8 | HackerRank Weather Observation Station 8 | HackerRank Query CITY names that start AND end with vowels. www.hackerrank.com [문제 풀이] Weather Observation Station 6 번 문제와 Weather Observation Station 7 번 문제를 응용해서 풀어보자. 모음으로 시작하면서 모음으로 끝나는 단어들을 찾으면 되니 (모음으로 시작하기) and (모음으로 끝나기) 형식으로 만들어보자. [코드] SELECT DISTINCT CITY FROM STATION WHERE (CITY LIKE 'a%' or CITY LIKE 'e%..