본문 바로가기

Java/알고리즘63

땅따먹기 ㅇ 문제설명 ㅇ 첫번째 시도 public static int solution(int[][] land) { //맨첫번째 행에서 4가지 경우의수를 구한다. int total = 0; int maxIndex = 0; for(int i = 0; i < land.length; i++){ if(i == 0){ total += maxArrNoEx(land[i]); maxIndex = findIndex(land[i],total); }else{ total += maxArr(land[i],maxIndex); } } return total; } public static int maxArr(int[] arr, int except){ int maximum = 0; for(int a = 0; a < arr.length; a++).. 2024. 4. 12.
롤케이크 자르기 ㅇ 문제설명 ㅇ 처음 푼 방법 public static int solution(int[] topping) { HashSet totalTypes = new HashSet(); for (int type : topping) { totalTypes.add(type); } int totalCount = totalTypes.size(); int waysToSplit = 0; HashSet leftTypes = new HashSet(); HashSet rightTypes = new HashSet(); for(int type : topping){ rightTypes.add(type); } for(int i = 0; i < topping.length-1; i++){ leftTypes.add(topping[i]); rig.. 2024. 4. 11.
방문길이 처음가본길만을 구하는 문제이므로, 중복되는 길은 선택하지 않는다는의미. 처음엔 최종적으로 위치해있는 지점의 x축 절댓값 + y축 절댓값을 더하면된다생각했는데 그건 아니었다. 어떻게 접근해야할까? 이동할때마다의 좌표를 저장하고 cnt를 ++ 해주면서, 저장된 좌표로 다시 이동하게되면 cnt를 해주지않고 넘어가는 방식으로 해야하나 싶다. 그런데 문제는 파라미터로 주어지는 dirs의 길이는 500이하다. 최대 500번의 좌표를 저장하게되면 런타임에러가 발생하지 않을까 싶다. 일단 한번 이렇게 해보겠다. 수도코드를 짜보자. // 먼저 (x,y)좌표를 나타낼 길이가 2인 int형 배열 xy를 초기화해주자. int[] xy = new int[2]; // 그다음 xy의 history를 담을 리스트로 ArrayList.. 2024. 3. 22.
이진 변환 반복하기 처음엔 1) binary 메서드로, 주어진 s에 0을 빼고, 남은 1의 개수를 이진법으로 반환하고, 뺀 0의 개수를 반환하는 메서드인 binary()를 만들고 2) solution메서드에서 s가 1이될때가지 binary메서드를 반복하고 binary 메서드를 몇번 호출했는지와, 총 뺀 0의 개수를 return하면되겠거니 해서 이렇게 풀었다. ㅇ 오늘의 풀이(오답) class Solution { public int[] solution(String s) { int zeroCnt = 0; // 누적된 0의 개수를 저장할 변수 int biCnt = 0; //binary 메서드를 몇번반복했는가를 저장할 변수 while (!s.equals("1")) { // 문자열이 "1"이 될 때까지 반복 int[] result .. 2024. 2. 20.