0️⃣ 확장함수를 왜? 우선 확장함수를 쓰게 된 계기는 정말 단순한데, 수준별 학습반에서 과제를 받았기 때문이다! 기존에 진행한 프로젝트를 함수평 프로그래밍이 가능하도록 리팩토링하는 것이 과제였다. 과제를 진행하고 피드백 받으며 배운 점을 기록해보겠다.1️⃣ 확장함수란? 코틀린은 클래스에 상속하거나 디자인 패턴을 사용하지 않고 새로운 기능으로 클래스를 확장할 수 있는 기능을 제공하는데, 이를 확장이라는 선언을 통해 이루어진다. 이 때 추가적인 메소드를 구현하면 확장함수라고 일컫게 되는 것이다. 마치 기본 클래스에 정의된 함수인 것처럼 새로운 기능을 추가하는 것이지만 실제로 확장 함수는 클래스 외부에서 선언된다. 그렇다면 확장함수의 장점과 단점은 무엇이 있을까?장점단점코드 가독성 향상외부 라이브러리 확장코..
Kotlin
0️⃣ StringBuilder()는?일반적으로 문자열은 String인데, 프로그래머스를 통해 문제를 풀다보면 StringBuilder()를 활용하는 경우가 정말 많다.그 둘의 차이점이 무엇이길래 다르게 이용하는 것일까? String은 immutable 객체다. 우리가 String을 통해 연산을 하면 + 또는 - 연산자를 이용하는데, string1 + string2 와 같은 연산을 하면 새로운 String을 생성한다. 기존에 참조하고 있던 값에 연산하는 것이 아닌 추가된 문자열을 갖는 새로운 String을 생성 후 참조를 바꾸는 형식인 것이다. 연산이 많아질 수록 자원 관리가 비효율적이게 되는 것이다. 때문에 이렇게 자원을 낭비하지 않기 위해 나온 것이 StringBuilder이다. StringBuild..
0️⃣ 왜 switch문인데?조건문은 우리가 일반적으로 사용하는 if else 문과 switch문이 있다. 처음 코딩을 배울 때는 그냥 if else문만 쓰면 되는 걸 왜 번거롭게 또 switch문을 배워 사용해야되는지 몰랐다. 대충 이야기를 듣자하니 "switch문이 더 성능이 좋대" 였다. 손에 익어야 쓰지~ 라며 막연하게 if else문 위주로 사용하던 나였는데 어느날 switch문의 간편함을 깨닫고 '그래, 성능도 더 좋은 switch문을 써보자.' 라는 다짐과 함께 switch문을 익혔고 이제는 switch문이 조금 더 편해졌다. 그렇다면 구체적으로 왜 switch문이 더 좋은지 알아보겠다. 1️⃣ if else문부터 보자.fun lunch(점심메뉴) { if(점심메뉴 == "떡볶이"){ ..
0️⃣ 객체지향프로그래밍? 클래스?코틀린은 자바와 같이 객체지향 프로그래밍을 언어인데, 이는 객체를 만들고 사용하며 적극 활용하는 언어임을 알 수 있다. 객체지향 프로그래밍은 OOP(Object Oriented Programming)이라고도 하며 모든 데이터를 Object, 즉 객체를 취급하여 처리하는 것이다. 그리고 이 객체는 속성과 메서드를 포함해야 하는데 이를 도와주는 것 설계도가 바로 클래스다. 클래스는 객체를 정의하는 틀 또는 설계를 의미하는데 좀 더 쉽게 설명하자면 붕어빵을 만들어내는 틀, 붕어빵 기계와 같다고 보면 된다. 고로 객체는 클래스를 인스턴스화한 데이터 덩어리를 의미하게 되고 객체와 클래스 인스턴스는 서로 바꾸어 사용할 수 있다. 객체지향 프로그래밍을 하려면 클래스를 잘 사용해야하며..
⛔ 문제사항어김 없이 프로그래머스에서 코딩테스트 문제를 풀고 있는데 이러한 에러가 발생했다. IntArray 타입의 answer 배열에 add() 함수가 작동하지 않는 것이었다. ✅ 해결방안이는 array의 특징 때문인데, array는 정적 타입으로 사이즈가 고정되어 추가나 삭제가 불가능하기 때문에 add 함수가 작동하지 않는 것이었다. 나는 mutableListOf로 조작이 가능한 동적 배열로 재선언하여 문제를 해결했다. ❗출처참고 사이트 : https://withhamit.tistory.com/73 [Kotlin] List, MutableListKotlin은 변경 가능한 리스트와 변경 불가능한 리스트를 구분한다. 위와 같이 List 자료형을 쓰는 경우 add 함수를 사용할 수 없다.add 함수를 사용..
❓ 문자열 내 마음대로 정렬하기문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 💡 풀이class Solution { fun solution(strings: Array, n: Int): Array { return strings.sortedWith( compareBy({ it[n] }, { it }) ).toTypedArray() }}strings 배열 안에 담긴 값을 비교하기 위해 다중조건을 통해 비..
❓ 나누어 떨어지는 숫자 배열array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요. 💡 풀이class Solution { fun solution(arr: IntArray, divisor: Int): IntArray { var newArr = arr.filter{it%divisor == 0}.sorted().toIntArray() return if(newArr.size == 0) newArr.plus(-1) else newArr }} arr 안의 값들 중 divisor로 나누어지는 값들만..
❓ 두 정수 사이의 합두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 💡 풀이class Solution { fun solution(a: Int, b: Int): Long { var sum: Long = 0; for(i: Int in Math.min(a, b)..Math.max(a, b)){ sum += i; } return sum; }}sum 값을 저장할 변수를 Long타입으로 선언한다.Math.min(a, b) / Math.max(a, b)로 a와 b 중 최소값..
❓ 자연수 뒤집어 배열로 만들기자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 💡 풀이class Solution { fun solution(n: Long): IntArray { var stringArray = n.toString().reversed().toList(); return stringArray.map{e -> e.toString().toInt()}.toIntArray() }}n은 Long타입이기 때문에 String으로 변환한다.String으로 변환된 n을 뒤집고 음절 단위로 끊어 배열로 변환한다.이 때 toList()로 반환한 배열은 List 타입이다.변환한 배열을 ..
❓ 자릿수 더하기자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 💡 풀이class Solution { fun solution(n: Int): Int { return n.toString().toCharArray().map{ it.toString().toInt() }.sum() }}n은 숫자형이기 때문에 각 자릿수에 접근하여 사용하기 위해 toString을 통해 문자열로 변환한다.변환한 문자열을 음절 단위로 분리하여 배열로 반환하는 toCharArray 메소드를 사용한다.반환된 배열 내부에서 map..
❓ 제목각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요. 💡 풀이class Solution { fun solution(angle: Int): Int { return when (angle) { in 1..89-> 1 //예각 90 -> 2 //직각 in 91..179 -> 3 //둔각 180 -> 4 //평각 else -> 0 } }}예각, 직각,..
❓ 짝수의 합정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요. 💡 풀이class Solution { fun solution(n: Int): Int { var answer: Int = 0 for(i:Int in 1..n){ if(i%2 == 0){ answer += i; } } return answer }}풀이는 비교적 간단하다. n만큼 반복문을 돌린다.반복문 내부에서 조건문을 통해 짝수만을 더해 값을 구하면 된다.1. for in (.. / until)fun example(n: Int){ for(i:Int in..