문제를 풀어보자.. 부족한 금액 계산하기 class Solution { fun solution(price: Int, money: Int, count: Int): Long = (1..count).foldIndexed(0L) { idx, acc, i -> acc + (price * i) }.minus(money).let { if(it < 0) 0 else it } } 처음 금액에 N배가 되어 증가하는 풀이이다. 금액이 부족하지 않으면, 0을 반환하는 메서드이다. 이 풀이는 아래 코드가 더 심플해 보여서 가져왔다. //부족한 금액 계산하기 class CalculateTheShortfall { fun solution(price: Int, money: Int, count: Int): Long = (1..count..
당황스러운 일이 있었다. 예전부터 구글 파이어베이스를 통해 구글 애널리틱스의 연동하여, 사용자를 모니터링하고, 앱 코드 안에 있는 logEvent 기능으로 인한, 이벤트 내역을 확인하려 했는데.. 이용자가... 0명... 으로 나와있다. 그럴리 없었다. 구글 플레이 콘솔은 하루 50명 ~ 100명 정도가 다운을 받는다는 기록이 세세히 나와있었기 때문에.. 불가능했다. 이유는 연동이 제대로 되지 않고 있었다는 소리였다.. 예전에 테스트도 해봤었는데.. 무슨 일일까 서둘러 문제법도 검색해보고, 고객센터에도 문의하였다. 그러면서 다른 문제점도 찾게 되었는데, FireBase -> Latest Release로 들어가게 되면, 파이어베이스에서 인식하는 나의 앱 버전이 나오게 되는데, 엥?? 내가 구글 플레이 콘솔..
문제를 풀어보자. 첫 문제는 약수의 개수에 따라 덧셈을 할지 빼야 할지 정해서 값을 산출하는 문제이다. 약수의 개수와 덧셈 class Solution { fun solution(left: Int, right: Int): Int { var cnt: Int var result = 0 for(i in left..right) { cnt = 0 for(j in 1..i) if(i % j == 0) cnt++ if(cnt % 2 == 0) result += i else result -= i } return result } } 처음에는 이런식으로 풀었는데, 코드가 난잡하고, 한눈에 알아보기가 힘들어, 답안을 보았는데, 한 줄에 깔끔하게 끝나는 코드를 발견할 수 있었다. //약수의 개수와 덧셈 class NumberA..
요즘 꾸준히 문제를 푸는 중이다. 아직 코틀린 쉬운 단계지만, 기본을 잘 익혀보자. 문자열 내림차순으로 배치하기 //문자열 내림차순으로 배치하기 class PlacingStringsInDescendingOrder { fun solution(s: String): String = String(s.toCharArray().sortedArrayDescending()) } 코틀린 내장함수에 sortedArrayDescending() 메서드를 이용했다. 숫자도 가능하지만, charArray로 만들면, 소문자 대문자 순으로도 바꿀 수 있기 때문에, 바로 구현이 가능하였다. 다른 방법으로는 //문자열 내림차순으로 배치하기 class PlacingStringsInDescendingOrder { fun solution(s..
fold 메서드를 알게 된 후로 자주 애용하게 된 것 같다. 아래 코드를 보자. 없는 숫자 더하기 class Solution { fun solution(numbers: IntArray): Int = (0..9).fold(0) { acc, num -> acc + if(!numbers.contains(num)) num else 0 } } 0.. 9에서 숫자를 fold로 뿌려주고, 파라미터로 전달받은 numbers IntArray에 포함되어 있지 않으면, acc에 더해주는 메서드이다. 근데 이것보다 훨씬 간결한 코드를 보았다. //없는 숫자 더하기 class AddMissingNumbers { fun solution(numbers: IntArray): Int = 45 - numbers.sum() } 와우.. ..
이구 졸리다.. 내일 처음으로 후 맛집 프로젝트 팀원들과 식사 자리를 가진다.. 얼른 글을 쓰고 자보자.. 수박수박수박수박수박수? StringBuilder().apply { repeat(n) { append(if(it % 2 == 0) "수" else "박") } }.toString() 내 처음 풀이는 이러했다. 전달받은 파라미터 n이 짝수인지, 홀수 인지 판단해서, StringBuilder에 append를 반복해주는 코드이다. 이 코드도 정답이었지만, 답안에서 CharArray를 사용한 방법이 더 깔끔하고, 효율이 좋아 코드를 가져왔다. //수박수박수박수박수박수? class WaterMelonWaterMelon { fun solution(n: Int): String = String(CharArray(n..
주말이라도 예외는 없다. 문제를 풀어보자. 나누어 떨어지는 숫자 배열 //나누어 떨어지는 숫자 배열 class DivisibleArrayOfNumbers { fun solution(arr: IntArray, divisor: Int): IntArray = arr.filter { it % divisor == 0 } .sorted() .toMutableList() .also { if(it.isEmpty()) it.add(-1) }.toIntArray() } 이 문제는 약간의 답을 참고하여 풀었다. also의 재발견... also로 객체 자체를 전달받아.. 코드를 한 줄로 스무스하게 만들 수 있는 좋은 메서드이다. divisor로 나누어지는 요소들을 필터링하고, 오름차순으로 정렬한 다음, 수정할 수 있는 mut..
배고프다.. 다이어트는 너무 힘들다. 문제를 풀어보자. 두 정수 사이의 합 class Solution { fun solution(a: Int, b: Int): Long { var result = 0L when { a == b -> result = a.toLong() a for(n in a .. b) result += n a > b -> for(n in b .. a) result += n } return result } } 두 정수 사이의 합을 구하는 문제이다. a와 b를 파라미터로 받고 대소 관계를 따져서 그에 맞는 for문을 돌려주어 문제를 해결하였다. 그런데 이 코드보다 더 효율적인 코드를 찾았다. class SumBetweenTwoIntegers { fun solution(a: Int,..
하루 시작에 머리를 맑게 해 주는? 코딩 테스트를 풀고 정리해본다. 우선 나머지가 1이 되는 수 찾기이다. 나머지가 1이 되는 수 찾기 //나머지가 1이 되는 수 찾기 class FindANumberWhoseRemainderIs1 { fun solution(n: Int): Int { var x = 1 while(true) if(n.rem(++x) == 1) break return x } } 문제는 입력받은 n 값을 나누어 나머지 1인 최솟값을 구하는 문제였는데, 원하는 값이 나올 동안 while문을 돌려 1씩 증가시켜 값을 얻었다. 증감 연산자를 전위형으로 하였고, n을 나누어줄 때 rem 메서드를 사용하였다. rem 메서드는 나머지를 구해주는 메서드이다. 여기서 한 가지 배운 사실이 있다. 숫자끼리에 ..
프로그래머스 입문자 시선으로 볼 때는 아직까지 비교적 쉬운 문제들이 마주하고 있다. 연습문제 느낌인데, 이런 거라도 풀면서 자신감도 늘리고, 코틀린 기능을 익히는 느낌으로 임하는 중이다. 첫 번째 문제는 파라미터로 입력받은 long타입에 수를 내림차순으로 반환하는 문제이다. 정수 내림차순으로 배치하기 //정수 내림차순으로 배치하기 class PlacingIntegersInDescendingOrder { fun solution(n: Long): Long = n.toString() .toCharArray() .sortedDescending() .joinToString("") .toLong() } 이 문제 같은 경우는 전달받은 long값을 문자열로 변환하고, 정렬을 위해 char 배열로 변환해준다. 그리고 내..
자바로만 코딩 테스트를 하다가 코틀린으로 하니.. 너무 수월한 내장함수들이 많은 듯하다.. 자바에서는 Arrays나, Collections 클래스를 많이 이용하고, 그에 맞게 namespace를 import 해주었는데, 코틀린은 내부에 적절하게 위에 코드에서 구현할 수 있는 메서드를 가지고 있어서 굳이, import하지 않고, 간편하게 구현할 수 있었다. 아래 문제를 보자. 자연수 뒤집어 배열로 만들기 //자연수 뒤집어 배열로 만들기 class FlipNaturalNumbersToFormAnArray { fun solution(n: Long): IntArray = n.toString() .reversed() .map { it.toString().toInt() } .toIntArray() } 파라미터로 받..
지금껏 Java로만 코딩 테스트를 풀었지만, 안드로이드 개발할때 코틀린만 쓰기도 하고, 오히려 코틀린 코딩테스트로 더 효율적인 코드로 알고리즘을 구현할 수 있지 않을까라는 생각, 게다가 보통 여러 회사들이 자바로 보통 테스트하지 않을까 생각했지만, 오히려 코틀린으로 코테를 보는 곳이 더 안드로이드에 대해 빠삭하지 않을까라는 로너 님의 의견을 듣고 마음이 흔들려 오늘부터 Java에서 코틀린으로 전환하기 했다. 삘타서 오늘 프로그래머스 문제로 5개의 문제를 풀어보았다. 첫 번째 문제는 짝수와 홀수 //짝수와 홀수 class EvenAndOdd { fun solution(num: Int): String = if (num % 2 == 0) "Even" else "Odd" } 짝수라면 Even을 홀수면 Odd를 ..
컴포즈를 공부하는 중이라 내용이 정확하지 않고, 부실할 수 있다는 점 양해 바랍니다. 오늘은 간단히 compose에서 사용하는 viewPager 기능과 유사한 기능을 사용함을 써, 앱을 처음 시작할 때 사용자에게 소개하는 가이드 화면을 예시로 만들어 보려고 합니다. 예시로 검은색 화면을 두었습니다. 가이드 화면이 있고, 옆으로 슬라이드 하게 되면 아래 왼쪽에 큰 하얀색점이 작아지고, 오른쪽 점이 커지게 하여, 가이드 페이지의 위치와 개수를 표현하게 됩니다. 사실 여러 viewPager를 찾는 중에 첫 번째 방법은 HorigontalPager라는 페이저 라이브러리였는데, 이러한 편리한 라이브러리도 있구나 정도로 생각을 했고, 두 번째 방법은 굳이 라이브러리를 사용하지 않고도, 만들 수 있는 법이 있었습니다..
처음 코딩 테스트 입문 때 11단계까지만 풀자 했는데.. 조금 늦었지만, 다 풀었다!! 라고 생각하는 순간 재귀와 정렬 쪽에서 문제가 추가되었다. 자주 문제가 추가되는 것 같긴 하다. 저것만 풀고 다음 단계로 넘어가자. 백준을 더 풀거나 프로그래머스 문제도 풀 생각이다. 저 11단계까지 문제가 무려 89문제나 된다.. ㅎㄷㄷ 아직 부족하다는 느끼지만, 더 풀어봐야 할 거 같다. 25501 문제는 거저 주는 느낌이 강했다. 코드를 살펴보자. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test25501 { public static void main(String[]..
쉬우면서도 어려운 문제였다. 나 같은 경우는 한 배열로 두 번의 Arrays.sort함수를 사용했다. 코드를 보자. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Test18870 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseI..
너무 졸리다.. 시골 와서 한 문제만 더 한 문제만 더 이러다가 2문제 째이다.. 이제는 문제 풀면서 졸고 있어서.. 한계이다.. 정렬 문제가 나한테 잘 맞는 것 같다.. 자신 있게 잘 풀어나가지는 것 같았다. 아래 코드를 봐보자. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Test1181 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Syste..
이전 시간에 좌표 정렬하기 문제에서 y로 바뀐 것 말고는 바뀐 게 없다. 이번에는 저번 문제에서 인터넷에서 찾아본 아래 코드 방법으로 배열을 정리해보면서 풀어보려고 한다. Arrays.sort(arr, (e1, e2) -> { //y값이 같으면 x로 순서 정렬 if(e1[1] == e2[1]) { return e1[0] - e2[0]; } //그게 아니면 y로 순서 정렬 return e1[1] - e2[1]; }); 좌표 정렬하기 1 문제의 링크이다. 2022.09.09 - [Programing/CodingTest] - CodingTest #24 Java 11650 (좌표 정렬하기) 문제 풀이 CodingTest #24 Java 11650 (좌표 정렬하기) 문제 풀이 추석이다.. 아고 언제 내려가나.. ..
추석이다.. 아고 언제 내려가나.. 문제 하나 풀어보았다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Test11650 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); StringTokeniz..
오늘 추석이라 회사에서 점심먹고 퇴근하라고 한다. 개이득!!! 오늘 푼 문제는 소트인사이드이다. Primitive type을 Wrapper type으로 바꾸는 것만 신경쓰면 정말 쉬운 문제였다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; public class Test1427 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamRead..
3번째 flow 예제 공부를 마쳤다. stateflow, sharedflow, channel에 대한 예제를 꾸렸지만, 모두 클릭 리스너를 달아 데이터를 가져오는데 그친 간단한 예제이지만, 기능보다는 각각의 특징과 공부한 내용들로 주를 이루었다. 우선 코드를 보자. MainViewModel.kt class MainViewModel : ViewModel() { //StateFlow private val _uiState = MutableStateFlow(UiState.Loading) val uiState: StateFlow = _uiState.asStateFlow() //SharedFlow //설정할 수 있다는 것만 보여주기 위함 //아래 설정은 다 기본값 private val _uiShared = Mutab..
flow에는 종료 시점에 후처리 할 수 있는 onCompletion이 존재한다. 우선 코드의 상황은 다음과 같다. useCase를 통해서 서버에 요청하여 list를 불러오는 viewModel의 코드 부분이다. class MainViewModel(private val useCase: UseCase) : ViewModel() { private val _blogList = MutableStateFlow(UiState.Loading) val blogList : StateFlow = _blogList.asStateFlow() private var isLast = false init { viewModelScope.launch { flow{ emit(useCase.getBlogList().toUiBlogList())..
평소처럼 run버튼을 누르고 앱을 실행했는데, 앱이 켜지지 않는 무반응 상태가 되었다. 디버그 모드로도 실행을 해보니 Waiting for application to come online:~~~~ 이런 글만 나오면서 빨간 에러가 뜨는 것이었다. 구글에 서치 해보니.. Device Manager에 들어가 해당 에뮬레이터를 wipe data 해주라는 것이었다. 아쉽게도 해결이 되지 않았는데, manifest에 들어가서 해당 액티비티에 exported를 true로 바꾸어주니 해결되었다!! 정말 알다가도 모르겠는 안드로이드 스튜디오이다...
하루에 한번씩 푸는 코딩테스트다. 요즘 프로젝트랑 같이 하느라 정신이 없지만.. 최대한 하루에 하나씩 해나가보려고 한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Collections; import java.util.StringTokenizer; public class Test25305 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Sy..
지금은 해결되고 캡처한 것이지만, 모든 코드에 빨간줄이 그어졌다... 해결법은... 윈도우나 맥에 사용자 폴더 안에 있는. gradle 폴더를 삭제하고 cleanProject -> RebuildProject -> Invalidate Caches Restart를 해주면 된다!! 그러면. gradle를 처음부터 다시 삭제하고 깔아주면서 해결이 된다. 갑자기 이런 오류가 뜬 요인은 잘 모르겠다.. 만약 위에 방법이 안된다면, 두번째 방법을 사용해보자. 안드로이드 스튜디오를 잠시 꺼주고, 해당 프로젝트 파일 안에 있는 .idea 파일을 삭제하고 다시 실행해본다. 나같은 경우는 두번째 방법으로 해결되었다.
상황은 이렇습니다. 다음과 같이 3개의 EditText가 있고, 이 EditText의 글씨가 모두 써졌으면, 아래 버튼이 활성화되게끔 하려고 합니다. 우선 저는 상태에 따른 모델 값이 필요하다고 생각하여 다음과 같이 UiState를 만들었습니다. UiState.kt data class UiState( val type: EditType? = null, var editState: EditState = EditState.EMPTY ) { enum class EditState { EMPTY, WRITTEN } enum class EditType { NAME, ADDRESS, PHONENUM } }ㅇ UiState는 type: EditType -> EditText의 들어갈 내용에 대한 타입입니다. (NAME, A..