목록전체보기 (69)
슈프림 블로그
# 실패 케이스 1 가장 먼저 생각했던 방식은 1. 모든 Int형 배열로 들어온 입력값을 String형 배열로 변환한다. 2. 맨 앞자리를 비교하여 큰 수가 앞으로 가도록 정렬한다. 3. 정렬된 배열을 하나의 문자열로 변환한다. (joined 함수) func solution(_ numbers:[Int]) -> String { var strings = numbers.map{String($0)} strings.sort{ guard let first0 = $0.first, let first1 = $1.first else { return false } return first0 > first1 } return strings.joined() } 이 방식은 두번째 테스트 케이스를 통과하지 못했다. 3과 30과 34를..
먼저 조건을 살펴보았다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 이 조건들을 살펴 보니, 각 장르별로 노래가 재생된 횟수를 모두 더한 값을 가지고 있는 딕셔너리가 하나 필요 할 것 같고 그 횟수에 따라 가장 많이 재생된 장르부터 정렬된 배열이 필요할 것 같다. 그리고 장르별로 속한 노래가 무엇인지 저장하는 딕셔너리도 필요할 것 같다. 딕셔너리의 value값은 id(Int)들을 저장하는 배열일 것이다. playsByGenre: [String:Int] [장르이름 : 해당 장르가 총 재생된 횟수] - genres와 plays의 크기는 같다고 했으므로, 그 크기만큼..
먼저, 내 GitHub name과 같은 이름의 Repository를 생성한다.Repository 이름을 입력하면 README.md를 내 GitHub 프로필처럼 사용할 수 있는 special repository라는 문구가 뜬다.Public으로 설정해주고, Add a README file에 체크해준다. 생성된 Repositroy의 기본 README.md는 다음과 같다. GitHub 프로필 Overview로 이동해 보니 Pinned Repositories 위에 새로운 무언가가 생겼다!좀전에 생성한 Repository의 README.md 파일을 수정하면 이곳도 함께 바뀌게 된다. 완성된 모습!
2020.08.30 어떻게 접근을 할까? 같은 이름의 옷은 없다고 했으므로 어떤 옷이 무슨 종류인지 보다, 옷의 종류별로 몇개의 옷이 있는지가 중요하다. => 반복문을 돌면서 [옷의 종류 : 종류별 개수] 형태의 딕셔너리에 저장하자. 한 종류의 옷은 0개 또는 1개만 착용 가능하고 한번에 옷의 종류별로 최대 1개씩만 착용 가능하므로 종류가 3종류라면 한번에 최대 3벌의 옷을 입을 수 있는 것이다. 상의에 착용할 수 있는 옷이 2벌, 하의에 착용할 수 있는 옷이 3벌인 경우를 가정해보자. 상의에 착용할 수 있는 경우의 수는 가지고 있는 2벌 또는 입지 않는 경우이므로 총 3가지다. 하의는 가지고 있는 3벌을 입거나 입지 않는 경우로 총 4가지다. 상의와 하의의 조합을 따져보면 총 3x4 = 12가지이다. ..
프로그램을 수많은 객체라는 기본 단위로 나누고, 이 객체들의 상호작용으로 서술하는 프로그래밍 방법론을 객체지향 패러다임이라고 한다. 객체를 만들기 위한 방법으로는 Struct (구조체) 와 Class (클래스) 를 사용하는 방법이 있다. 구조체와 클래스는 프로퍼티와 메서드를 가지고 있고, 이를 통해 데이터와 기능들을 정의할 수 있다. 구조체와 클래스를 정의한다는 것은 새로운 데이터 타입을 정의하는 것이라고 할 수 있다. 둘의 사용법과 역할이 거의 비슷한데, 차이는 무엇일까?? 사용방법을 살펴 보면서 차이점을 알아보자. 구조체 구조체 정의 구조체는 struct 키워드로 정의한다. 구조체 명은 타입 명 이라고 생각할 수 있으므로, Int, Bool 과 같이 대문자 카멜 케이스로 작성하는 것이 좋다. 중괄호 ..
배열이란? (Array) 프로그래밍에서 데이터 값을 저장하는 공간을 변수라고 부른다. 독립적인 한 개의 값만 저장할 때는 변수를 사용하지만, 연관된 데이터를 한꺼번에 묶어서 저장할 때는 주로 배열을 사용한다. 언어마다 배열을 다루는 함수나 방법들이 다 다르지만 일반적으로 배열은 연속된 물리적 메모리 공간에 데이터를 저장한다. 데이터에 접근하기 위해서는 인덱스(데이터의 위치)로 접근한다. 인덱스를 통해 데이터에 접근하는 시간 복잡도는 O(1) 이 소요된다. => 빠르다. 배열은 새로운 값을 삽입하려면 삽입하고자 하는 위치보다 뒤에 있는 원소들을 한 칸씩 뒤로 밀어주어 삽입할 공간을 확보해주어야 한다. 또한 중간에 있는 값을 삭제하려면 뒤에 이어지는 원소들을 한 칸씩 앞으로 당겨서 삭제된 빈 공간을 채워 주..
Swift에서 함수형 프로그래밍 패러다임을 접할 때 클로저를 잘 이해해야 명확하게 이해할 수 있다. Swift의 클로저는 다른 언어의 **람다(Lambda)**와 유사하다 일정 기능을 하는 코드를 하나의 블록으로 ({} 안에) 모아 놓은 것. 함수도 클로저의 한 형태이다. 변수나 상수를 클로징한다 : 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있다. 클로저 표현 { (매개변수...) -> 반환타입 in 실행 코드 } 더보기 예시 ) String Type의 배열의 이름들을 담아 내림차순으로 정렬하는 코드 Swift 라이브러리의 sorted(by:) 메서드 정의 public func sorted(by areInIncreasingOrder: (Element,Element) -> Bool) -> ..
self 모든 타입 인스턴스는 self라는 암시적 속성(키워드를 생략할 수 있다는 의미)을 가진다. 인스턴스 자신과 정확하게 동일하다. self 속성을 사용하여 자신의 인스턴스 메소드 내에서 현재 인스턴스를 참조할 수 있다. 사실 self는 그렇게 자주 사용할 필요가 없다. 그럼 언제 사용하냐고? 인스턴스 메소드의 파라미터가 인스턴스 프로퍼티와 이름이 같을 때, 구분해주기 위하여 인스턴스 프로퍼티에는 self.xx을 사용한다. super self가 자기 자신의 인스턴스를 나타낸 키워드라면, super는 슈퍼클래스를 가리키는 키워드이다. 슈퍼클래스의 메소드는 super.xx() 이런식으로 호출 가능하다.