[프로그래머스] 파일명 정렬
·
PS/프로그래머스
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 해석file이름 문자열을 총 3가지 구간으로 나눈다.head숫자가 최초로 나오기 전까지 모든 문자열number숫자로만 이루워져 있는 구간tailnumber에 숫자가 아닌 다른 문자가 나온 이후 모든 문자열 이후 정렬 조건은 다음과 같다.head 기준 오름차순head가 같으면 number 기준 오름 차순number까지 같으면 처음에 주어진 순서 기준 (stable sort)import Foundationstruct File: Comparable { let head: String let number:..
[프로그래머스] 압축
·
PS/프로그래머스
문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  해석처음 A ~ Z 까지는 1 ~ 26까지 색인번호가 명시되어 있고 주어진 문자를 하나씩 순회하며 다음글자와의 조합 (w+c) 가 사전에 존재하는 지 여부에 따라 분기가 나눠진다. 만약 존재한다면별도의 출력 없이 현재 문자열이 w+c로 갱신되고만약 존재하지 않는다면현재 문자열의 색인을 출력w+c를 사전에 추가한다또한 현재문자열(w)는 다음 문자열(c)가 된다.여기서 중요한 점은 나는 w를 문자열의 첫 문자가 아닌 공백("")문자열로 시작했다. 이렇게 해야 인덱스 접근이 보다 편하고 분기가 간편해진다. 코드..
객체 지향 프로그래밍 (2) [ S.O.L.I.D ]
·
CS/객체지향
오늘은 객체 지향 프로그래밍 설계 원칙인 S.O.L.I.D 원칙에 대해 알아보자  SOLID란?SOLID 원칙들은 결국 클래스 내부 응집도는 높이고, 타 클래스들 간 결합도는 낮추는 High Cohesion(응집도) - Loose Coupling(결합도) 원칙을 객체 지향의 관점에서 도입한 것이다. 1) S - 단일 책임원칙 (SRP, Single Responsibility Principle)하나의 클래스는 단 하나의 책임만 가져야한다를 정의하는 원칙이다.위의 다이어그램을 한번 살표보자 왼쪽에 Person이라는 클래스 안에 나이, 이름, 혈액형 ~ 개발언어, 커리어까지 모두 모아 놨을 때 이 Person의 모든 특징을 만족하는 사람은 환자이면서 개발자인 사람 밖에 없다. 그렇다는 것은 개발자면서 환자인 ..
객체 지향 프로그래밍 (1) [ 개념, 특징 ]
·
CS/객체지향
오늘은 객체 지향 프로그래밍의 여러가지 개념 , 특징을 차례대로 학습해보자. 객체 지향이란?프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체 로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 구성 요소 1) 클래스 객체(object)를 생성하기 위한 설계도이다.어떤 동작이 있는지, 어떤 변수를 갖고 있는 지 미리 명시해두는 역할을 한다. 2) 인스턴스 클래스는 집에 필요한 공통적인 내용들이 들어있는 집의 설계도 (공통분모) ,인스턴스는 설계도 의 실질적인 값을 갖고 있다. 인스턴스는 힙 영역에 할당된다.  3) 객체 객체란 인스턴스 + class를 포함하고 있는 개념으로 객체 지향 프로그래밍에서 의미있는 작은 단위를 담당한다.마치 큰 집을 지을 때 필요한 블럭..
디스패치 학습하기 (4) [ Extension Dispatch ]
·
프로그래밍언어/swift
이번 학습은 extension에서 동작하는 dispatch를 알아보자.extension을 할 수 있는 3가지 경우는 다음과 같다.값 타입에서 확장래퍼런스 타입에서 확장프로토콜에서 확장각 각의 상황에서 어떤 디스패치가 동작하는 지 알아보자. Value Type 확장 시 Dispatch상속의 가능성이 없기 때문에, 확장(exension)을 해도 Static Dispatch로 동작한다. struct Human { func sayHello() { print("Hello Human!") }} extension Human { func sayHo() { print("Ho~~") }} let human: Human = .init()human.sayHello() ..
디스패치 학습하기 (3) [ Value Type Dispatch, Protocol Dispatch ]
·
프로그래밍언어/swift
이번에는 단순한 값 타입과 프로토콜을 이용 했을 때 동작하는 Dispatch를 알아보자 Value Type에서의 DispatchValue Type인 구조체, 열거형은 상속을 할 수 없다는 특징 때문에 오버라이딩이 될 가능성이 없고, 따라서 Static Dispatch 를 사용한다 Protocol에서의 Dispatch프로토콜은 기본적으로 메서드의 선언부만 제공하기 때문에 실제 사용할 때 프로토콜 타입을 참조로만 사용할 경우 해당 인스턴스에 맞는 메서드를 호출해야하므로 Dynamic Dispatch를 사용한다.  두개의 struct가 Human 프로토콜을 채택했지만 왼쪽은 값타입인 구조체를 이용했기 때문에 Static Dispatch가 이루워지고 오른쪽은 프로토콜을 타입을 사용했고 해당 인스턴스 타입에 맞..