코틀린

    [Kotlin] Delegated Properties

    일반적으로 프로퍼티는 필요할 때마다 수동으로 구현할 수 있지만, 한 번 구현한 후 필요할 때마다 재사용하는 것이 더 유용하다. 대상은 다음과 같다. Lazy 속성: 최초 접근시에만 값을 계산. Observable 속성: 이 속성의 변경사항을 리스너로 알림. 별도의 필드가 아닌 맵에 속성을 저장. 이 경우들을 처리하기 위해 Kotlin은 Delegated Properties를 지원한다. class Example{ var p: String by Delegate() } 형태는 val/var : by 이다. by 뒤에 붙은 expression이 대리자(delegate)이며, 프로퍼티에 대한 get() / set()을 대리자 getValue() / setValue() 메소드에 위임한다. 프로퍼티 대리자는 인터페이..

    [프로그래머스/Kotlin] 멀쩡한 사각형

    문제 설명 가로길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자 칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭짓점 2개를 잇는 방향으로 잘라 놓았습니다. 그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm × 1cm로 잘라 사용할 수 있는 만큼만 사용하기로 하였습니다. 가로의 길이 W와 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구하는 solutio..

    [Kotlin] 코틀린의 시퀀스(Sequence)

    코틀린 표준 라이브러리에는 container type인 시퀀스가 있다. 이 시퀀스는 Iterable object에 사용할 수 있다. 기존의 Iterable이 전체 collection에 대해 정의된 순서대로 확장 함수들을 완료하고 다음 단계로 넘어갔다면 시퀀스는 각각 하나의 엘리먼트가 확장함수들을 수행하고 다음 단계로 넘어간다. 물론 크기가 매우 작은 Iterable일 때는 상관없겠지만, 반대로 매우 클 경우에 발생할 수 있는 오버헤드를 해결할 수 있는 유용한 방법이다. 그러므로 상황에 따라 시퀀스를 쓸지 그냥 Iterable 그대로 쓸지 잘 생각해봐야 한다. 일반적인 Iterable이 체인되어 있는 확장 함수들에서 어떻게 동작하는지 확인해보자. val maxEvenSquare = listOf(1, 2, ..

    [프로그래머스/Kotlin] 2016년

    문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한 사항 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 a b result 5 24 "TUE" 풀이 class Solution { fun solution(a: Int, b: Int): String = Calendar.g..

    [프로그래머스/Kotlin] 두 개 뽑아서 더하기

    문제 설명 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 사항 numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. 입출력 예 numbers result [2,1,3,4,1] [2,3,4,5,6,7] [5,0,2,7] [2,5,7,9,12] 입출력 예 설명 입출력 예 #1 2 = 1 + 1입니다. (1이 numbers에 두 개 있습니다.) 3 = 2 + 1 입니다. 4 = 1 + 3입니다. 5 = 1 + 4 = 2 + 3입니다. 6 = 2 + 4입니다. 7 = 3 + 4입니다. ..

    [프로그래머스/Kotlin] 최소직사각형

    문제 설명 이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로길이와 세로 길이를 나타냅니다. 명함 번호 가로 길이 세로 길이 1 60 50 2 30 70 3 60 30 4 80 40 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다. 모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solu..