전체 글 78

[프로그래머스] 문자열 압축 (python) - 2020 KAKAO BLIND RECRUITMENT

1. 문제 설명 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 aabbaccc의 경우 2a2ba3c(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, abcabcdede와 같은 문자열은 전혀 압축되지 않습니다. 어피치는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘라서 압축하여..

Problem Solving 2020.06.21

18. 프로퍼티 - iOS 프로그래밍을 위한 스위프트 기초

- 프로퍼티의 종류 인스턴스 저장 프로퍼티 타입 저장 프로퍼티 인스턴스 연산 프로퍼티 타입 연산 프로퍼티 지연 저장 프로퍼티 - 정의와 사용 프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다. 다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있다. 연산 프로퍼티는 var로만 선언할 수 있다. 연산프로퍼티를 읽기 전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없다. 읽기전용으로 구현하려면 get 블럭만 작성해주면 된다. 읽기전용은 get블럭을 생략할 수 있다. 읽기, 쓰기 모두 가능하게 하려면 get 블럭과 set블럭을 모두 구현해주면 된다. set 블럭에서 암시적 매개변수 newValue를 사용할 수 있다. - 응용 - 지역변수 및 전역변수 저장 프로퍼티와 연산 프로퍼티의 기능은 함수..

[프로그래머스] 저울 - 그리디(greedy)

1. 문제 설명 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 합니다. 이 저울의 양팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같습니다. 또한, 저울의 한쪽에는 저울추들만 놓을 수 있고, 다른 쪽에는 무게를 측정하려는 물건만 올려놓을 수 있습니다. 저울추가 담긴 배열 weight가 매개변수로 주어질 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 return 하도록 solution 함수를 작성해주세요. 예를 들어, 무게가 각각 [3, 1, 6, 2, 7, 30, 1]인 7개의 저울추를 주어졌을 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값은 21입니다. 2. 제한 사항 저울추의 개수는 1개 이상 10,000개 이하입니다. 각 추의 무게는 1 이상..

Problem Solving 2020.06.19

17. 클로저 고급 - iOS 프로그래밍을 위한 스위프트 기초

클로저는 아래 규칙을 통해 다양한 모습으로 표현될 수 있다. 후행 클로저 : 함수의 매개변수 마지막으로 전달되는 클로저는 후행클로저(trailing closure)로 함수 밖에 구현할 수 있다. 반환타입 생략 : 컴파일러가 클로저의 타입을 유추할 수 있는 경우 매개변수, 반환 타입을 생략할 수 있다. 단축 인자 이름 : 전달인자의 이름이 굳이 필요없고, 컴파일러가 타입을 유추할 수 있는 경우 축약된 전달인자 이름($0, $1, $2...)을 사용 할 수 있다. 암시적 반환 표현 : 반환 값이 있는 경우, 암시적으로 클로저의 맨 마지막 줄은 return 키워드를 생략하더라도 반환 값으로 취급한다. 기본 클로저 표현 // 클로저를 매개변수로 갖는 함수 calculated(a:b:method:)와 결과값을 저..

16. 클로저 기본 - iOS 프로그래밍을 위한 스위프트 기초

- 클로저 클로저는 실행가능한 코드 블럭이다. 함수와 다르게 이름정의는 필요하지는 않지만, 매개변수 전달과 반환 값이 존재 할 수 있다는 점이 동일하다. 함수는 이름이 있는 클로저이다. 일급객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능하다. - 기본 클로저 문법 클로저는 중괄호 { }로 감싸져있다. 괄호를 이용해 파라미터를 정의한다. -> 을 이용해 반환 타입을 명시한다. "in" 키워드를 이용해 실행 코드와 분리한다. { (매개변수 목록) -> 반환타입 in 실행 코드 } - 클로저 사용 - 함수의 전달인자로서의 클로저 클로저는 주로 함수의 전달인자로 많이 사용된다. 함수 내부에서 원하는 코드블럭을 실행 할 수 있다.

15. 클래스 vs 구조체 / 열거형 - iOS 프로그래밍을 위한 스위프트 기초

클래스는 참조 타입, 열거형과 구조체는 값 타입이라는 것이 가장 큰 차이이다. 클래스는 상속이 가능하지만, 열거형과 구조체는 상속이 불가능 하다. - 값 타입과 참조 타입 비교 값 타입(Value Type) : 데이터를 전달 할 때 값을 복사하여 전달한다. 참조 타입(Reference Type) : 데이터를 전달 할 때 값의 메모리 위치를 전달한다. - 값 타입을 사용하는 경우 연관된 몇몇의 값들을 모아서 하나의 데이터 타입으로 표현하고 싶은 경우 다른 객체 또는 함수 등으로 전달될 때 참조가 아니라 복사(값 복사) 할 경우 자신을 상속할 필요가 없거나, 다른 타입을 상속 받을 필요가 없는 경우 - 스위프트에서의 사용 스위프트의 기본 데이터 타입은 모두 구조체로 구현 되어있다. 스위스트는 구조체와 열거형..

14. 열거형 - iOS 프로그래밍을 위한 스위프트 기초

- 열거형 Swift 열거형은 다른 언어의 열거형과 많이 다르다. 강력한 기능을 지니고 있어 잘 알아두고 사용하면 좋다. 유사한 종류의 여러 값을 한 곳에 모아서 정의한 것이다. 예) 요일, 월, 계절 등 enum 자체가 하나의 데이터 타입으로, 대문자 카멜케이스를 사용하여 이름을 정의한다. 각 case는 소문자 카멜케이스로 정의한다. 각 case는 그 자체가 고유의 값이다.(각 case에 자동으로 정수값이 할당되지 않음) 각 case는 한 줄에 개별로도, 한 줄에 여러개도 정의할 수 있다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // ... } // 예제 enum BoostCamp { case iosCamp case androidCamp case webCam..

[프로그래머스] 섬 연결하기 - 그리디(greedy) (python)

1. 문제 설명 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다. 2. 제한사항 섬의 개수 n은 1 이상 100 이하입니다. costs의 길이는 ((n-1) * n) / 2이하입니다. 임의의 i에 대해, costs[i][0] 와 costs[i] [1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때 드는..

Problem Solving 2020.06.19

13. 클래스 - iOS 프로그래밍을 위한 스위프트 기초

- 클래스란? 클래스는 참조(reference) 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. Swift의 클래스는 다중 상속이 되지 않는다. - 클래스 문법 정의 : "class" 키워드 사용 class 이름 { /* 구현부 */ } 프로퍼티 및 메서드 구현 구조체 - call by value 클래스 - call by reference 타입 메소드에는 상속시 재정의가 불가한 static 메소드와 재정의가 가능한 class 메소드가 존재한다. 클래스 사용 클래스의 인스턴스는 참조 타입이므로 let으로 선언되더라도 인스턴스 프로퍼티의 값 변경이 가능하다. - 학생 클래스 만들어 보기 struct와 같은 예제이다.

12. 구조체 - iOS 프로그래밍을 위한 스위프트 기초

- 구조체란? 스위프트 대부분 타입은 구조체로 이루어져 있다. 구조체는 값(value) 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. - 구조체 문법 구조체 정의 : "struct" 키워드 사용 //MARK: - 정의 struct { /* */ } 구조체 프로퍼티 및 메서드 구현 구조체 사용 불변 인스턴스 값을 바꿀 수 없다. 불변 인스턴스의 가변 프로퍼티 또한 바꿀 수 없다. 타입 프로퍼티는 struct에 호출한다. - 학생 구조체 만들어보기 class는 키워드 이지만 'class' (따옴표) 를 통해 변수로 선언할 수 있다. class와 struct 구분하기는 다음에 !