전체 글 59

[Swift] 컬렉션 타입 (Array, Dictionary, Set)

컬렉션 타입이란? 데이터들의 집합 묶음, 데이터의 집합소 지정된 타입들을 하나로 묶은 형태를 말한다. 즉, 하나의 컬렉션 타입은 하나의 데이터 타입만 담을 수 있다. 1. Array 데이터 타입의 값들을 순서대로 저장하는 리스트 var numbers: Array = Array() // [] numbers.append(1) // [1] numbers.append(2) // [1,2] numbers.append(3) // [1,2,3] numbers[0] // 1 numbers.insert(4, at: 2) // [1,2,4,3] numbers.remove(at: 0) // [2,4,3] // 축약 선언 var names = [String]() var names2: [String] = [] 2. Dictio..

Swift & iOS 2022.05.02

[Swift] 상수, 변수, 데이터 타입, 타입 추론

Swift 에서는 상수와 변수를 let 과 var 로 선언할 수 있다. 상수 변하지 않는 일정한 값을 갖는다. let 상수명 : 데이터 타입 = 값 변수 변할 수 있는 값을 갖는다. var 변수명 : 데이터 타입 = 값 "모든 값을 변수로 두면 편하지 않을까?" 라는 생각을 할 수 있지만, 상수를 사용하는 이유는 가독성과 안전성 때문이다. 상수로 선언된 값은 변하지 않는 것이라는 주석이 없어도 변하지 않는 값이라는 것을 알 수 있으며, 관리가 용이하다. 그리고 바뀌면 안되는 값을 상수로 선언해두면 실수로 값이 변경되는 것을 막는 등 보다 안전한 코드 작성이 가능하다. 기본 데이터 타입 Int: 64bit 정수형 UInt: 부호가 없는 64bit 정수형 (양수만 가능) Float: 32bit 부동소수점 D..

Swift & iOS 2022.05.02

[Swift] Swift란? 스위프트의 특징은?

Swift(스위프트)란? 2014년 9월 애플 세계 개발자 회의(WWDC)에서 처음 소개된 프로그래밍 언어 기존의 애플 운영체제용 언어인 Objective-C와 함께 공존할 목적으로 만들어졌으며, 현재는 모든 사항들이 오픈소스로 공개되면서 세계의 수많은 프로그래머들이 협력하여 언어를 발전시키고 있다. 2022년 2월 기준, TIOEB에서 선정한 검색어 점유율 상위 20개 프로그래밍 언어 중 12위(1.18%)를 차지할 만큼 영향력 있는 프로그래밍 언어이다. 애플이 최초에 스위프트를 발표했을 때 스위프트 언어의 특성을 Safe, Modern, Powerful이라고 발표했다. 그러나 오픈소스로 전환되면서 특징을 Safe, Fast, Expressive로 변경하여 발표했다. Swift(스위프트)의 특징 1. ..

Swift & iOS 2022.05.01

[프로그래머스] 피보나치 수 (python)

코딩테스트 연습 - 피보나치 수 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = programmers.co.kr 👩🏻‍💻 코드 def fibo(n): arr = [] for i in range(n): if i < 2: arr.append(1) else: arr.append(arr[i - 1] + arr[i - 2]) return arr[n - 1] def solution(n): answer = fib..

[프로그래머스] 최댓값과 최솟값 (python)

코딩테스트 연습 - 최댓값과 최솟값 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를 programmers.co.kr 👩🏻‍💻 코드 def solution(s): s_list = list(map(int, s.split())) return str(min(s_list)) + ' '+ str(max(s_list)) 📝 정리 프로그래머스에서 Level 2에 있는 문제들을 모두 풀기 위해 풀은 문제 ! string로 들어오는 문자열을 int형 list로 변환시킨 후, min과 max를 str 형태로 반환해주면 되었다.

[프로그래머스] 영어 끝말잇기 (python)

코딩테스트 연습 - 영어 끝말잇기 3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0] programmers.co.kr 👩🏻‍💻 코드 def solution(n, words): word_set = {words[0]} n_cnt = [0] * (n + 1) n_cnt[1] += 1 for i in range..

[프로그래머스] 가장 큰 정사각형 찾기 (python)

코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr 👩🏻‍💻 코드 def solution(board): answer = board[0][0] for i in range(1, len(board)): for j in range(1, len(board[i])): if board[i][j] == 1: board[i][j] = 1 + min(board[i-1][j-1], board[i-1][j], board[i][j-1]) answer = max(answer, board[i][j]) return answer**2 📝 정리 DP 방식으로 풀면 간단하게 풀리는 문제였다. 나는 아이디어가 생각 안 나서 찾아봤지만.. ..

[프로그래머스] 올바른 괄호 (python)

코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr 👩🏻‍💻 코드 def solution(s): stack = [] for c in s: if c==')': if len(stack)==0: return False top = stack.pop() if top != '(': return False elif c == '(': stack.append(c) if len(stack) > 0: return False return True 📝 정리 여는 괄호'(' 일 경우, stac..

[네트워크] Blocking과 Non-Blocking I/O

I/O 작업 I/O 작업은 User level에서 직접 수행할 수 없고, Kernel level에서만 수행할 수 있다. 따라서, 유저 프로세스(스레드)는 커널에게 I/O 작업을 요청하고 작업 완료 후 커널이 반환하는 결과를 기다릴 뿐이다. 네트워크에서의 I/O 작업은 소켓의 read/send를 생각하자. Blocking I/O I/O 작업이 진행되는 동안 유저 프로세스는 자신의 작업을 중단한 채 대기하는 방식 진행 순서 유저가 커널에게 read 작업 요청 데이터가 입력될 때까지 대기 데이터가 입력되면 커널 모드에서 유저 모드로 데이터 복사 특징 I/O 작업이 진행되는 동안 유저 프로세스는 자신의 작업을 중단한 채 대기 애플리케이션에서 다른 작업을 수행하지 못하고 대기하므로 자원 낭비 Non-Blockin..

[네트워크] 로드 밸런싱 (Load Balancing)

로드 밸런싱 네트워크 또는 서버에 가해지는 로드를 분산해주는 기술 Load Balancer (로드 밸런서) 로드밸런싱 기술을 제공하는 서비스 또는 장치 클라이언트와 네트워크 트래픽이 집중되는 서버들 또는 네트워크 허브 사이에 위치한다. Load Balancer의 종류 1) L4 로드 밸런싱 전송 계층에서 로드를 분산한다. IP주소나 포트번호, MAC 주소 등에 따라 트래픽을 나누고 분산 처리하는 것이 가능 CLB(Connection Load Balancer) 혹은 SLB(Session Load Balancer)라고 부르기도 한다. 2) L7 로드 밸런싱 애플리케이션 계층에서 로드를 분산한다. OSI 7계층의 프로토콜(HTTP, SMTP, FTP 등)을 바탕으로도 분산 처리 가능 L4 vs L7 차이 로드..