오늘의 코딩 테스트는 두 문제를 풀어보았다. 과일 장수 //과일 장수 class Fruiterer { fun solution(k: Int, m: Int, score: IntArray): Int { var sum = 0 score.sortedArrayDescending().also { arr -> repeat(arr.size / m) { i -> val start = i * m val end = start + m arr.copyOfRange(start, end).also { copy -> sum += (copy.minOrNull() ?: 1) * m } } } return sum } } 오름차순을 배열을 정렬하고, 상자에 담을 수 있는 양을 m으로 나누어, 상자에서 제일 낮은 품종의 사과를 m을 곱해 su..
어제 풀다 만 숫자 짝꿍 문제를 풀어보자. 숫자 짝꿍 //숫자 짝꿍 class NumberMate { fun solution(X: String, Y: String): String { val answer = StringBuilder() val arrX = IntArray(10) val arrY = IntArray(10) countNumInArr(X, arrX) countNumInArr(Y, arrY) for (i in arrX.indices.reversed()) { while (arrX[i] >= 1 && arrY[i] >= 1) { arrX[i]-- arrY[i]-- answer.append(i) } } val result = if (answer.toString() == "") { "-1" } else ..
휴.. arcore로 정신없이 코딩하다.. 코테를 많이 하지 못해.. 한 번에 세문제를 풀었다. 콜라 문제 //콜라 문제 class ColaProblem { fun solution(a: Int, b: Int, n: Int): Int { //가지고 있는 빈병 갯수 var empty = n //받은 콜라 개수 var recieved = 0 while (empty > a - 1) { //몫 val share = (empty / a) * b //나머지 val remainder = empty % a //남은 콜라수 empty = share + remainder //받은 콜라수 recieved += share } return recieved } } 빈병 개수가 마트에서 콜라를 받기 위해 주어야 하는 병 수 a에서 ..
자 문제를 풀어보자. 실패율 //실패율 class FailureRate { fun solution(N: Int, stages: IntArray): IntArray { val result: IntArray //실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수(notCleardLength) / 스테이지에 도달한 플레이어 수 cleardLength //스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 var notCleardLength: Int //스테이지에 도달한 플레이어 수, 처음은 스테이지 사이즈가 기본 값(전체 문제) //소수점 비교를 위해 float 사용 var cleardLength = stages.size.toFloat() //결과 담을 map 만들어주기 //사이즈 초깃값..
오늘은 두 문제를 풀어보았다. 첫 번째 문제를 보자. 문자열 내 마음대로 정렬하기 //문자열 내 마음대로 정렬하기 class SortingStringsMyOwnWay { fun solution(strings: Array, n: Int): Array = strings.sortedWith( compareBy( { it[n] }, { it } ) ).toTypedArray() } 처음으로 두 개의 조건식으로 정렬할 수 있는 sortedWith와 compareBy 메서드를 써보았다. 처음에는 strings로 받은 문자열 배열에서 문자열에 n번째 숫자의 따라 정렬을 해주고, 만약 같은 숫자가 나타날 때는 원래 사전대로 정렬을 위해 기본값인 it을 써주어 정렬하고, 마지막에 이 list를 StringType의 배열..
일이 많아.. 문제를 많이 풀지 못해지고 있다. 한 문제씩이라도 풀어보자. 최소 직사각형 //최소직사각형 class MinimumRectangle { fun solution(sizes: Array): Int { val sorted = sizes.map { it.sorted() } return (sorted.map { it[0] }.maxOrNull() ?: 0) * (sorted.map { it[1] }.maxOrNull() ?: 0) } } 2차원 배열을 받는 문제인데 먼저 받은 배열 안에 int 배열들을 정렬시켜준다. 문제 자체가 제일 넉넉한 지갑을 최소 사이즈로 만드는 것인데, 만약 세로 사이즈가 가로사이즈보다 크다면, 뒤집어서 사용이 가능하다고 하기 때문에, 위에 조건대로라면, 각 int 배열들을..
문제를 풀어보자.. 부족한 금액 계산하기 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..
문제를 풀어보자. 첫 문제는 약수의 개수에 따라 덧셈을 할지 빼야 할지 정해서 값을 산출하는 문제이다. 약수의 개수와 덧셈 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 메서드는 나머지를 구해주는 메서드이다. 여기서 한 가지 배운 사실이 있다. 숫자끼리에 ..
자바로만 코딩 테스트를 하다가 코틀린으로 하니.. 너무 수월한 내장함수들이 많은 듯하다.. 자바에서는 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를 ..
처음 코딩 테스트 입문 때 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..
하루에 한번씩 푸는 코딩테스트다. 요즘 프로젝트랑 같이 하느라 정신이 없지만.. 최대한 하루에 하나씩 해나가보려고 한다. 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..
요즘은 회사도 바쁘고, 사이드도 진행하느라, 바쁘지만, 그동안 잊고 안 했던 코딩 테스트를 다시 해보려고 한다. 오랜만에 해보니 역시 살짝 감을 잃은 느낌이다. 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..
역시나 전 문제도 문제풀이를 볼 수밖에 없었던 너무나도 어려운 문제였다ㅠㅠ 그래도 이번 문제는 직접 풀어 기분 좋아 글을 써본다. 물론 효율적인 방법은 아닌 것 같다. 다른 분이 써놓은 코드랑 비교하니 내가 너무 비효율적이었던 것이다. 우선은 기록이니 글을 쓰고, 답과 한번 더 비교해보며 공부해봐야겠다. 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]..