Kotlin

    [Kotlin] String 압축하기 : 반복되는 문자 압축하기

    문제 반복되는 문자를 합쳐서 [문자][반복된 숫자]로 표현하라. 만약 압축된 문자가 원래 문자보다 길다면 원래 문자를 반환하라 예1) aaabbccc -> a3b2c3 예2) abbc -> abbc : a1b2c1 보다 원래 문자가 더 짧으므로 문제 풀기 전 확인 사항 - String에 스페이스가 있는가? - 같은 길이면 어떻게 하는가? 문제 풀이 - string의 첫 Char로 초기화 하고 포인터를 1씩 증가시키면서 같은 Char이 나오는지 확인해야 한다. - 같은 Char이 나오면 counter을 1씩 증가시킨다. - 다른 Char이 나오면 StringBuilder에 추가한다. class Solution() { fun compress(string: String) : String { var pointe..

    [Kotlin] 두개의 String이 있다고 했을 때, 하나의 String에 대해 문자를 하나 이하로 추가하거나 지우거나 다른 값으로 바꾸었을 때 동일한지 확인

    문제 두개의 String이 있다고 했을 때, 하나의 String에 대해 문자를 하나 이하로 추가하거나 지우거나 다른 값으로 바꾸었을 때 동일한지 확인 - "abcd", "abc" 이면 문자 하나가 차이나므로 true반환 - "abcd", "acbd" 이면 문자가 2개를 바꿔야 하므로 false 반환 문제 풀기 전 확인 사항 1. 공백이 있는지 확인해야 함. 공백은 없음 2. 대소문자 구분이 있는지 확인해야 함. 대소문자 구분 있음 문제 풀이1 첫 문제풀이는 문제 풀이의 경우를 세가지로 나눈다. 1. 문자열의 길이가 같은 경우 2. 문자열의 길이가 1 차이 나는 경우 3. 문자열의 길이가 2 이상 차이 나는 경우 각 방식은 다음과 같이 구현한다. 1. 문자열의 길이가 같은 경우 - 포인터를 1씩 증가시키면..

    [Kotlin] 중복 문자열 확인 알고리즘

    문제 문자열이 주어졌을 때, 이 문자열에 같은 문자가 중복되어 등장하는지 확인하는 알고리즘을 작성하라 문제 풀기 전 확인 사항 문자열이 ASCII인지 아니면 유니코드인지 확인 필요 공백은 문제 풀이1 : Map 자료 구조를 사용한 문제 해결 풀이 만약 문자열이 유니코드로 인코딩되어 있다면, 최대 4바이트이기 때문에 Map 자료 구조를 사용하는 것이 좋다. class Solution() { fun hasDuplicateCharacter(string : String) : Boolean { val map : MutableMap = mutableMapOf() for(char in string) { char.code if(map[char] == true) return true else map[char] = tru..

    Coroutine 공유 상태와 동시성 3편 - Mutex 사용하기, Actors 사용하기

    Mutex 사용하기 문제에 대한 상호 배제 솔루션은 모든 모든 공유 상태에 대한 변경을 절대로 동시에 실행되지 않는 critical section*1으로 만들어 보호하는 것이다. 블로킹을 수행하기 위해서는 일반적으로 synchronized나 ReentrantLock을 사용한다. Coroutine의 대체제는 Mutex*2라 불린다. 이는 critical section을 구분하기 위한 lock과 unlock 함수를 가진다. 중요한 차이점은 Mutext.lock()이 일시중단 함수라는 것이다. 이는 Thread를 블록하지 않는다. mutex.lock(); try { ... } finally { mutex.unlock() } 패턴을 나타내는 withLock 확장함수 또한 있다. val mutex = Mutex(..

    [Unit Testing] 어떤 클래스에 테스트가 필요할까? data class 도 테스트가 필요한가?

    [Unit Testing] 어떤 클래스에 테스트가 필요할까? data class 도 테스트가 필요한가?

    테스트는 어떤 클래스에 필요할까? 객체 지향 언어에서 클래스는 데이터만을 저장하는 클래스, 동작을 포함하는 클래스 두가지 종류로 나뉜다. 예를 들어 Java의 경우는 일반적인 클래스와 POJO 클래스가 있다. Kotlin의 경우는 데이터만을 저장하는 클래스와 동작이 포함된 클래스가 있다. 프로그래밍에서는 데이터만을 저장하는 클래스를 '데이터 구조' 라 부르고 동작을 포함하는 클래스를 '객체'라 부른다. Unit Testing에서의 Unit은 특정한 책임을 가지고, 명확히 정의된 역할을 가진 것이다. 이는 바로 '객체'를 뜻한다. 즉, Unit Testing의 대상은 객체이지 데이터 구조가 아니다. 따라서 테스트가 필요한 클래스는 동작을 포함하는 클래스인 객체이다. Kotlin의 data class는 테스..