내일배움캠프 54일차 TIL _ 12주 1일차
2024. 7. 1. 21:49ㆍTIL Java
- 오늘 있었던 일
- 스프링 공부
- 알고리즘
알고리즘 문제 풀기
● 뒤에 있는 큰 수 찾기
더보기
● 뒤에 있는 큰 수 찾기 //링크
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
Stack<Integer> stack = new Stack<>();
stack.push(0);
for (int i = 0; i < numbers.length; i++) {
while (!stack.isEmpty() && numbers[i] > numbers[stack.peek()]) {
answer[stack.pop()] = numbers[i];
}
stack.push(i);
}
while (!stack.isEmpty()) {
answer[stack.pop()] = -1;
}
return answer;
}
}
- 첫 도전엔 실패했지만 다음 문제를 고쳐서 통과했다.
- 문제 지문에
- 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
- 각수의 다음값을 컬렉션의 큐를 이용해 구했지만 -1가 나오는 수를 설정하지 못해 다시했다.
- 스택을 이용해 수를 구하는게 아닌 인덱스를 구하는 방식으로해서 통과했다.
- 문제 지문에
- 밑은 다른 사람의 풀이
-
import java.util.*; class Solution { public int[] solution(int[] numbers) { int[] answer = new int[numbers.length]; Arrays.fill(answer, -1); Stack<Integer> s = new Stack<>(); s.push(0); for(int i = 1; i < numbers.length; i++){ while(!s.isEmpty()){ int idx = s.pop(); if(numbers[i] > numbers[idx]){ // 뒤가 더 클때 answer[idx] = numbers[i]; } else { // 앞이 더 크거나 같을 때 s.push(idx); break; } } s.push(i); } return answer; } }
- 컬렉션... 필요없었네
● 롤케이크 자르기
더보기
● 롤케이크 자르기 //링크
import java.util.*;
class Solution {
public int solution(int[] topping) {
int answer = 0;
Map<Integer, Integer> leftMap = new HashMap<>();
Map<Integer, Integer> rightMap = new HashMap<>();
for (int i = 0; i < topping.length; i++) {
rightMap.put(topping[i], rightMap.getOrDefault(topping[i], 0) + 1);
}
for (int i = 0; i < topping.length; i++) {
leftMap.put(topping[i], leftMap.getOrDefault(topping[i], 0) + 1);
if (rightMap.get(topping[i]) == 1) {
rightMap.remove(topping[i]);
} else {
rightMap.put(topping[i], rightMap.get(topping[i]) - 1);
}
if (leftMap.size() == rightMap.size()) {
answer++;
}
}
return answer;
}
}
-
- 2번만에 통과했다.
- 문제 지문에
- 동생은 네 가지 토핑(1, 2, 3, 4)을 맛볼 수 있으므로, 이는 공평하게 나누어진 것이 아닙니다. 만약 롤케이크의 네 번째 토핑(3)과 다섯 번째 토핑(1) 사이를 자르면 [1, 2, 1, 3], [1, 4, 1, 2]로 나뉘게 됩니다
- 스택을 이용해 각 경우를 구해서 했을때 시간 초과로 실패했다.
- 멥을 이용해 각 수를 구해 배열을 순회 해서 값을 구했다.
- 밑은 다른 사람의 풀이
-
class Solution { public int solution(int[] topping) { int answer = 0; int[] left = new int[10001], right = new int[10001]; int ls = 0, rs = 0; for(var i : topping) right[i]++; for(var i : right) rs += i > 0 ? 1 : 0; for(var i : topping) { right[i]--; if (right[i] == 0) rs--; if (left[i] == 0) ls++; left[i]++; if (rs == ls) answer++; } return answer; } }
- 다른 사람의 댓글
- for(var i : right) rs += i > 0 ? 1 : 0;
- rs 에 i > 0 큰 경우 +=1 아니면 += 0
- 이렇게도 구할수 있구나
당일 회고
- 오늘 너무 더워서 샤워를 2번이나 했는데 덥다.
너무 어지러운데 열사병인가?
'TIL Java' 카테고리의 다른 글
내일배움캠프 56일차 TIL _ 12주 3일차 (0) | 2024.07.08 |
---|---|
내일배움캠프 55일차 TIL _ 12주 2일차 (0) | 2024.07.02 |
내일배움캠프 53일차 TIL _ 11주 5일차 (0) | 2024.06.28 |
내일배움캠프 52일차 TIL _ 11주 4일차 (0) | 2024.06.27 |
내일배움캠프 51일차 TIL _ 11주 3일차 (0) | 2024.06.26 |