오늘은 SSAFY
에서 관통 프로젝트가 있는 날이다
9to6을 프로젝트와 함께 보내야해서 PS를 오전에 못풀었고 점심시간이 되어서야 조금씩 끄적이고 있음..
일단 빠르게 PS 문제라도 풀어야지
어제 문제를 풀까 했지만 오늘 문제가 이미 올라와 있어서 먼저 풀어보려고 한다!
오늘의 문제
- 비기너: 나누어 떨어지는 숫자 배열(https://school.programmers.co.kr/learn/courses/30/lessons/12910)
- 미들러: 행렬의 곱셈 (https://school.programmers.co.kr/learn/courses/30/lessons/12949)
- 챌린저: 디펜스 게임 (https://school.programmers.co.kr/learn/courses/30/lessons/142085)
4분 전으로 풀었다!
그렇지만 늘 몇개가 담길지 모르는 값을 배열에 담아 return
하려고 할 때
가변배열 List
를 선언하고 이를 반복문을 돌며 배열
에 담는 로직이 너무 번거롭다..
이 참에 람다식으로 배울까 싶은데,
람다는 사실 PS에서 좋은 습관은 아니어서 지양하지만
이런 경우엔 적합할 것 같다는 생각이 들음
아니나 다를까 다른사람 풀이를 봤는데 있음
하지만 지금 문제엔 맞지않는 풀이라 조금 수정했음
import java.util.*;
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] ans = Arrays.stream(arr).filter(f -> f%divisor == 0).toArray();
Arrays.sort(ans);
return ans.length == 0?new int[]{-1}:ans;
}
}
최대 3ms 에 수행하던 로직이 최대 7ms에 수행된다.. 흠
다시 프젝 시작해서 하고 와야지
결국 오후 8시가 되어서야 다시 돌아왔지만 프젝은 아직 끝나진 않았다.. 도커 설치가 오래걸려서 짬을 내어서 왔음
와 이거 생각보다 구현이 어렵다..
행렬의 곱셈이 어떤 것이었는지 기억해냈는데 그걸 코드로 풀어내려니 쉽지 않았음
그래서 일단 그림으로 순서도를 명확하게 그려봤다
길이와 로직에 대해선 완전이 이해를 했고 이를 3중 반복문으로 가져갈지 4중으로 가져갈지 고민했음
그러다 3중으로 해도 풀림을 깨달았고 구현했는데, 구현력 기르는데 좋은 문제였다고 생각함!
이건 집가서 풀어야지!
그림 참고 해서 풀이했습니다 감사합니다~