지금껏 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..
데이터 형식 모델 피드백 이후 변경 사항입니다. 우선 blog 부분입니다. 기존에는 Blog라는 클래스를 두고, 두 개의 클래스 DaumBlog, NaverBlog의 상속시켜 코드를 짰지만, Blog 클래스 자체적인 프로퍼티인 BlogType enum 타입을 통해 Daum과 Naver를 구분 짓도록 변경하였습니다. Blog.kt import kr.loner.shared.BlogType /* * 블로그 데이터 클래스입니다. * id : 고유값 * title : 블로그의 타이틀명입니다. * info : 블로그에 대한 설명글 입니다. * img : view의 표시될 하나의 이미지입니다. * blogUrl : 아이템을 눌렀을 때, 웹뷰로 전달할 url입니다. * type : blog의 종류를 결정하는 타입 값입..
네트워크 통신 즉, 하나의 컴퓨터에서 다른 컴퓨터로 객체를 보낼때 그 자체를 보내는데에는 어려움이 있다. 보낼 객체가 통신이 가능하게 변환해 주어야 하는데 우리는 이러한 작업을 직렬화라고 하고, 이렇게 받은 직렬화된 파일을 다시 객체로 변환해주는 것을 역 직렬화라고 한다. 직렬화에는 여러 종류가 있다. 첫 번째는 gson이다. 간단하게 장점이라면, Json으로 또는 그 반대로 변환 가능한 간단한 메서드인, toJson() 와 fromJson()를 제공 Java Generics의 광범위한 지원 개체에 대한 사용자 지정 표현 허용 등이 있다. 두번째는 moshi 이다. moshi 같은 경우는 Gson이 하지 않는 몇 가지를 최적화 한다고 합니다. 첫번째는 코틀린의 지원 @HexColor int와 같은 한정자..
2231 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test2231 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String N = br.readLine(); int valueLength = N.length(); int value = Integer.parseInt(N); int result = getInitialNum(value, valueLength); Syste..
3003 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Test3003 { static int[] correct = { 1, 1, 2, 2, 2, 8 }; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); S..
rxjava와 레트로핏을 다음과 같이 사용하였다. CompositeDisposable 객체를 만들고, 다음과 같이 네트워크를 호출하였다. val disposable = CompositeDisposable() disposable.add( RetrofitClient.getRetrofitInstance(application) ?.getProductList( user?.authCompanyCode, getAuthKey(application), user?.mobileUid, user?.sessionId, pageNo, pageSize, "desc" )?.subscribeOn(Schedulers.newThread()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscrib..
요즘은 회사도 바쁘고, 사이드도 진행하느라, 바쁘지만, 그동안 잊고 안 했던 코딩 테스트를 다시 해보려고 한다. 오랜만에 해보니 역시 살짝 감을 잃은 느낌이다. https://st-lab.tistory.com/97 [백준] 2798번 : 블랙잭 - JAVA [자바] www.acmicpc.net/problem/2798 2798번: 블랙잭 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블 st-lab.tistory.com 스트렌져님의 블로그를 참고하였다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr..
최근에 새로운 앱을 만들기 위해 고군분투 중이다. 기존 앱에 서버에서 받는 api의 원시 데이터는 xml을 사용했는데, 이번 앱은 json을 사용하게 되었다. 다행이 인터넷에 자료가 많아 데이터를 보내는데 문제가 없었다. 그렇지만, 이미지를 보내는 과정에서 어려움이 생겼다. 서버 개발자분이 Multpart를 통해서 서버로 이미지를 보내달라고 요청하셨다. 멀티파트?? 구글에 쳐본 결과 멀티파트란? - HTTP 요청의 한 종류로서 서버에 파일이나 데이터를 보내기 위한 요청 방식이다. - 보통은 큰 용량의 바이너리 데이터 전송에 적합하다. 한마디로 큰 이미지 파일 등을 서버로 넘겨줄 때 적합한 방법이다. 레트로핏을 이용해서 사용해보자 (물론 레트로핏 종속성과 실행법은 모두 알고 있다는 전제로 설명하겠다.) 데..
오늘 회사에서 하루 종일 삽질한 문제이다. 나 같은 경우는 리사이클러뷰 안에 리사이클러뷰를 사용하는 중복 리사이클러뷰를 구현하고 있었는데, 글라이드 라이브러리를 통해서 이미지를 디스플레이하였다. 그런데 문제는 arrayList에서 0인덱스 자리에만 이미지가 출력되면 좋겠지만, 9인 덱스 자리에서도 똑같은 이미지가 출력되는 것이었다. 아이템의 개수를 증가하니, 9 배수 자리의 인덱스 값에서만 같은 이미지가 계속 출력되는 것이었다. 리사이클러뷰 어뎁터를 갱신할 때는 DiffUtil을 사용하고 있었는데, 혹시나 리사이클러뷰가 두 개이니 각각의 리사이클러뷰를 갱신하지 못해서 생긴 문제인가 생각이 들었다. (리사이클러뷰 하나만 갱신을 진행하고 있는 상태) 물론 이게 문제가 아니었다.. 이것 때문에 막혀서 시간을 ..
A 액티비티에서 B 액티비티로 이동하는 중, 다음과 같이 상태 표시줄이 사라지는 상황이 생겨 버렸다. 처음 들어간 화면인 A 액티비티에서는 잘 나오지만, B 액티비티로 이동하면 사라진다. A 액티비티 B 액티비티 알아보니 안드로이드에는 light모드와 dark 모드가 있는데, 그 둘을 구분하기 위한 statusbar 속성을 달아주어야 하는 것이다. theme.xml 이 두개가 있을 텐데, light 모드는 true 이것을 추가해주고 dark 모드는 false로 해준다. false 이렇게 각각 설정해주고 다시 앱을 실행해 보자. 정상적으로 잘 나오는 것을 확인할 수 있다.
역시나 전 문제도 문제풀이를 볼 수밖에 없었던 너무나도 어려운 문제였다ㅠㅠ 그래도 이번 문제는 직접 풀어 기분 좋아 글을 써본다. 물론 효율적인 방법은 아닌 것 같다. 다른 분이 써놓은 코드랑 비교하니 내가 너무 비효율적이었던 것이다. 우선은 기록이니 글을 쓰고, 답과 한번 더 비교해보며 공부해봐야겠다. 1978 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; import java.io.BufferedReader; import java.io.IOException; import java..
https://st-lab.tistory.com/78 [백준] 2775번 : 부녀회장이 될테야 - JAVA [자바] https://www.acmicpc.net/problem/2775 2775번: 부녀회장이 될테야 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다. (1
목요일부터 시작해 오늘까지 풀 공부를 달리는 중이다.. 뿌듯한 마음도 들지만, 아직까지도 내가 부족하다 느낀다. 오늘은 어제 마지막까지 풀었지만, 수학 능력이 부족하다고 판단하여.. 계차수열을 좀 더 공부하고, 풀어본 1193 분수 찾기 문제이다. 오랜 시간이 걸려서 마침내 결과를 정답으로 바꾸었다. 아쉬운 점은 메모리를 많이 먹었다는 점.. 아무래도 코드를 간결하게 짜지 못했을뿐더러.. 대책없는 천만 단위까지 for문 돌리기, List에 사용으로 인한 것 같다. 그래도 서툰 정답과 구글을 통해 다른 사람의 정답과 비교해보았다.. 무려 100ms 시간 차이가 났다.. 보고 배울게 많은 것 같다. 우선 나의 코드이다. 1193 import java.io.BufferedReader; import java.i..
허.. 점점 어려워지고 있다. 난이도가 급 상승한 느낌이다... 한 문제를 몇 시간 동안 쳐다보고 있는지 모를 정도였다. 내 부족한 수학 실력에 대해서 깨우칠 수 있었던 시간이었던 것 같다. 이거.. 수학도 같이 공부해두면 좋을 것 같다. 1316 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; public class Test1316 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStream..
오늘은 여자 친구와 하루 종일 공부를 했다. 평소에 하루에 하나씩 풀자던 코딩 테스트를 자주 풀지 못해 오늘 이렇게 하루종일 풀게 되었다. 하나하나 자세히 설명하기엔 시작은 부족하지만, 조금 설명을 해보겠다. 10809 public class Test10809 { //알파벳은 총 26개 public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] arr = new int[26]; //모든 값 -1로 초기화 Arrays.fill(arr, -1); String s = br.readLine(); for(int i = 0; ..
정신없이 흘러간 일중리이다.. 셀프 넘버를 풀다 어려워 답을 보고, 한수를 풀다가 어려워 답을 보고... 갑자기 난이도가 급 어려워진 느낌을 받았다. 자연스레 어려운 느낌을 받아 며칠간 코딩 테스틀 풀기가 꺼려지면서 도전하지 못하고 있다가, 너무 쉰 것 같아서 이어서 풀었다. 역시나.. 늦은 시간이라 답만 접어두려 한다. 4673 public class Test4673 { public static void main(String[] args) { boolean[] check = new boolean[10001]; for (int i = 1; i < 10001; i++) { int self = getSelf(i); //true는 셀프넘버가 아닌 숫자이다. if (self < 10001) check[self]..
오늘도 미라클 모닝을 실현했다. 그리고 지금 이 글을 쓰고, 안드로이드 강의를 들으려고 한다. 그런데, 오늘 아침 코딩 테스트를 풀어보니 느낀 점은, 어려운 문제가 나오면 출근 전이다 보니 시간에 쫓기듯 문제를 푼다는 점이다. 가뜩이나 시간도 별로 없는 상황에서 말이다. 그래서 한번 아침에 강의를 듣고, 저녁에 코딩 테스트를 풀어보려고 한다. 시간적 여유를 가지고 풀고 싶기 때문이다. 오늘 문제도 1문제밖에 풀지 못했지만, 꾸준히 풀어나가자. 이번엔 처음으로 함수를 만드는 문제였다. 15596 public class Test15596 { long sum(int[] a) { long result = 0; for(int i = 0; i < a.length; i++) { result += a[i]; } ret..