Kotlin 문법 및 연습 문제 11

(Kotlin) - 프로그래머스 푸드 파이터 대회

[ 접근 방법 ] - 처음에는 result 에 122333 이 추가될 때 동시에 끝자리부터 333221 를 추가하려고 했지만 생각해 보니 그렇게까지 할 필요가 없었다. '1223330' 까지 만들어 주고 나면 그 뒤에는 '333221' 즉 0을 제외한 역순으로 문자열을 이어주면 됐기 때문이다. class Solution { fun solution(food: IntArray): String { var answer = mutableListOf() for(i in 1 until food.size) { if(food[i] % 2 == 0) { for(j in 1..food[i]/2) { answer.add(i.toString()[0]) } } if(food[i] % 2 == 1) { food[i] = food[..

Kotlin - 문자열 내 마음대로 정렬하기

문제를 처음 접근할 때 n번째 인덱스의 문자열을 가져와서 순서대로 정렬하는 것까지는 쉬웠지만 그 문자열을 포함한 단어를 가져와서 다시 정렬하는 과정에서 조금 막혔다. class Solution { fun solution(strings: Array, n: Int): Array { var answer = Array(strings.size) {" "} var midVal = Array(strings.size) {" "} for(i in strings.indices) { midVal[i] = strings[i][n].toString() } val sort = midVal.indices.sortedWith(compareBy({midVal[it]}, {strings[it]})) for (i in sort.indic..

(Kotlin) - 이상한 문자 만들기

처음에 이 문제를 이해한 방식은 인덱스를 정수로 가져와서 2로 나누었을 때 나누어 떨어지지 않으면 홀수로 판단하고 대문자로 출력하게끔 코드를 짰다. class Solution { fun solution(s: String): String { var answer = "" val chars = s.split(" ") for(i in chars) { var change = "" for(j in i.indices) { change += if (j % 2 == 0) i[j].toUpperCase() else i[j].toLowerCase() } answer += "$change " } return answer.trim() } } ㄴ> 위와 같은 방식으로 테스트 케이스를 돌렸을 때 실패인 경우가 절반 정도 뜨길래 문..

Kotlin - object를 이용한 싱글톤 객체 생성

[ 싱글톤 객체 ] - 애플리케이션 전역에서 하나의 인스턴스만 생성되는 객체를 말하며 클래스의 인스턴스를 여러 번 생성하지 않고 한 번만 생성하여 공유함으로써 자원의 낭비를 줄이고 일관된 상태를 유지할 수 있도록 한다. - Kotlin에서 싱글톤 객체는 'object' 키워드를 사용하여 정의되며 클래스 선언과 객체의 생성을 동시에 수행하며 싱글톤 객체는 클래스 내부의 프로퍼티 및 메서드를 정의할 수 있다. object ShoppingCart { private val items = mutableListOf() private var userMoney = 0 // 사용자 잔액 fun initMoney(money: Int) { userMoney = money } fun addItem(item: MenuItem)..

Kotlin - 비동기 프로그래밍 (쓰레드, 코루틴)

비동기 프로그래밍이란? : 여러가지 로직들이 완료 여부와 관계 없이 실행되는 방식 (쉽게 설명하면 정해진 순서 없이 동시에 수행) 동기 프로그래밍 : 요청을 보낸 로직이 완료되어 결과값을 받을 때까지 다음 작업은 멈춘 상태로 기다림 쓰레드(Thread) : 로직을 동시에 실행할 수 있도록 돕는 것이 목적이다. 프로그램은 하나의 main 쓰레드가 존재하며 별도의 자식 쓰레드를 thread 키워드로 생성 가능하다. : 동시성 보장 수단: Context Switching, 운영체제 커널에 의해 동시성 보장 / 작업 단위 = Thread / 각 Thread가 독립적인 Stack 메모리를 가짐 : 블로킹(Blocking) : Thread A 가 Thread B 의 결과를 기다리고 있으면 A는 블로킹 상태며 B의 ..

(Kotlin) 나누어 떨어지는 숫자

주어진 배열 안의 원소가 주어진 divisor로 나누었을 때 나누어 떨어지는 원소만 따로 배열에 담아 return 해야 하는 문제고 이 문제는 어려운 문제는 아니지만 isNotEmpty() 함수를 처음 사용해 보는 것이기 때문에 기록한다. class Solution { fun solution(arr: IntArray, divisor: Int): IntArray { var resArr = mutableListOf() for(i in arr.indices) { if(arr[i] % divisor == 0) { resArr.add(arr[i]) } } resArr.sort() if(resArr.isNotEmpty()) { return resArr.toIntArray() } else { return intArr..

(Kotlin) 정수 제곱근 판별

먼저 Kotlin에서 제곱식을 구현하려면 pow라는 함수를 사용해야 하는데 이는 Kotlin의 math 라이브러리에 존재한다. 따라서 math 라이브러리를 import 한다. import kotlin.math.* class Solution { fun solution(n: Long): Long { var sqrt = sqrt(n.toDouble()) return if(sqrt % 1.0 == 0.0) { // 제곱근 판별 (sqrt + 1).pow(2.0).toLong() } else { -1L } } } [ Kotlin 함수 간단 정리 ] - pow() : 인자를 받아 제곱 연산을 수행하며 Int를 인자로 받을 수 있으나 반환 자료형은 Double이다. (sqrt + 1).pow(2.0).toLong()..

(Kotlin) 하샤드 수 구하기

[ 하샤드 수의 조건 ] - 양의 정수 x의 자릿수의 합이 정수 x로 나누어 떨어져야 함. ex) x = 18 -> 1 + 8 = 9 -> 18 / 9 = 2 로 나누어 떨어짐. 따라서 x는 하샤드 수이다. class Solution { fun solution(x: Int): Boolean { var answer = true var xStr = x.toString() var Sum = xStr.map { it.toString().toInt() }.sum() // map 함수를 사용해 x를 문자열로 변환하여 각 자릿수를 떼서 리스트에 담고 다시 정수로 // 변환하고 sum() 을 통해 정수 리스트의 합계를 계산 (정수 리스트면 반환형도 정수) return x % Sum == 0 } } [ Kotlin 메소..

(Kotlin) 프로그래머스 문제 설명의 제한 조건 의미

이 문제를 풀기 전 나는 여태까지 제한 조건이 내가 걸러내야 하는 조건인 줄 알고 코드를 짤 때 계속 제한 조건에 맞는 조건문을 작성했다. class Solution { fun solution(s: String): Int { var answer = 0 var currentNumber = 0 var currentSign = 1 if (s[0] != '0') { if (s[0] == '-') { currentSign = -1 } else if (s[0] == '+') { currentSign = 1 } else { val digit = s[0].toString().toInt() currentNumber = digit } for (i in 1 until s.length) { val digit = s[i].to..

(Kotlin) 자연수를 뒤집어 배열로 만들기

이 문제는 한참 전에 풀었지만 자연수를 입력받아 배열 타입으로 순서를 거꾸로 출력하는 코드가 필요하다. class Solution { fun solution(n: Long): ArrayList { var answer = ArrayList() val nString = n.toString() val nArray = nString.map { it.toString().toInt() }.toIntArray() for(i in 1..nString.length) { answer.add(nArray[nString.length - i]) } return answer } } ㄴ> 방법은 매우 간단하다 return 될 answer 배열에 전체 길이의 -1 씩 줄어들어가며 맨 뒤에 있는 원소부터 집어넣고 return하면 된다..