배열 잡 기술
//1. 중복 제거
Integer[] result = Arrays.stream(arr).boxed().distinct().toArray(Integer[] :: new);
Arrays.sort(result, Collections.reverseOrder()); // 2 내림차순 정렬
// int형 배열로 변경 후 반환
System.out.println(Arrays.stream(result).mapToInt(Integer::intValue).toArray());
두 개 뽑아서 더하기
https://school.programmers.co.kr/learn/courses/30/lessons/68644
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 분석 나눠 생각하기
1. 모든 경우의 수를 다 구하기
2. 중복을 제거하기
3. 오름차순으로 출력하기
문제 분석 제약사항 파악
딱히 특별한 예외는 파악되고 있지 않음
입력값 분석
100이하니까 n^3도 가능하다
데이터 흐름 파악
중복을 제거하는건 배열에도 있어 distinct() or treeset도 방법
정렬을 하는건 sort()가 있어.
의사 코드
1. 입력을 보존한다.
2. 입력을 기반으로 모든 경우의 수를 구한다.
3. 경우의 수에서 중복을 제거한다.
4. 경우의 수에서 오름차순 정렬을 한다.
모의 고사
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 나눠 생각하기
1. 각 수포자들의 순열을 담기
2. 문제와 수포자들 순열로 비교하여 정답을 카운팅하기
3. 카운팅 했을때 가장 높은 숫자들을 뽑아서 정렬
입력값 분석
10000 문제. 따라서 nlogn 밖에 안됨
데이터 흐름 분석
순서 부터 값까지 전부 일치해야하므로 배열이 적절해 보임.
의사 코드
1. 수포자들의 순열을 만들자 12345 / 21232425/ 3311224455
2. 문제를 받아와서 전체 탐색 돌리는 동안 수포자들도 하나씩 탐색 인덱스가 증가해야해.
3. 일치하면 카운트 증가
4. 가장 높은 카운트 녀석 순서대로 결과값에 담기
행렬의 곱셈
https://school.programmers.co.kr/learn/courses/30/lessons/12949
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
와 씨 개빡세네
행렬의 곱셈 이비에스아이 정승제 강의 한번 다시 듣고
나눠생각하기
1. 행렬의 곱셈 공식 구현 : 가로곱하기 세로 각각 다더한거
2. 다차원 배열을 어떻게 저장할지 : 무조건 2차원 행렬이래.
예외 고려하기
곱할 수 있는 배열만 주어지니 신경꺼
입력값 고려하기
100 x 100 행렬 끼리의 곱셉 연산 n=100 n^3도 가능
의사코드
1. 행렬의 곱셈공식을 구현하라1 : 뭐끼리 곱할지
2. 곱셈공식2 : 뭐끼리 더할지
3. 곱셈공식3 : 그 결과를 어디에 저장할지
1. 먼저 arr2의 열의 개수가 열을 결정
arr1의 행의 개수가 총 더해야하는 양을 결정
2x3 x 3x2 = 2x2
3x2 x 2x2 = 3x2
1행 1열끼리 곱하고 더해, 1행 2열끼리 곱하고 더해 2행 1열끼리 곱하고 더해 2행 2열끼리 곱하고 더해 3행 1열끼리 곱하고 더해 3행2열끼리 곱하고 더해
1행 1열끼리 1열만큼 1행만큼 곱하고 더해, 1행 2열끼리 1열만큼 2행만큼 곱하고 더해, 1행 3열끼리 1열만큼 3행만큼 곱합고 더해
2행 1열끼리 2열만큼 1행만큼 곱하고 더해, 2행 2열끼리 2열만큼 2행만큼 곱하고 더해, 2행 3열끼리 2열만큼 3행만큼 곱합고 더해
class P121_Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
//2x3 x 3x2 = 2x2 | 3x2 x 2x2 = 3x2
int[][] answer = new int[arr1.length][arr2[0].length];
//1. 행렬의 곱셈공식을 구현하라1 : 뭐끼리 곱할지
//1행 1열끼리 1열만큼 1행만큼 곱하고 더해, 1행 2열끼리 1열만큼 2행만큼 곱하고 더해, 1행 3열끼리 1열만큼 3행만큼 곱합고 더해
//2행 1열끼리 2열만큼 1행만큼 곱하고 더해, 2행 2열끼리 2열만큼 2행만큼 곱하고 더해, 2행 3열끼리 2열만큼 3행만큼 곱합고 더해
for(int i=0; i<arr1.length; i++){ //arr1 행의 개수
for(int j=0; j<arr2[0].length; j++){//arr2 열의 개수
for(int k=0; k<arr2.length; k++) {// arr1 열의 개수 == arr2 행의 개수 이게 성립을 안하면 애초에 암되는 녀석
answer[i][j] += arr1[i][k] * arr2[k][j];
//n행 m열의 값은 arr1 n행의의 모든값과 arr2 m열의 모든 값을 끼리끼리 곱하여 더한것. <- 이게 공식 구현
}
}
}
return answer;
}
}
'Learn > 코딩 테스트 합격자 되기: 자바 편' 카테고리의 다른 글
[chapter 05 배열][저자추천문제] 배열의 평균값 | 배열 뒤집기 | n^2 배열 자르기 | 나누어 떨어지는 숫자 배열 (2) | 2024.12.19 |
---|---|
배열: 실패율 | 방문 길이 (0) | 2024.12.02 |
자바로 코딩테스트 준비 (2) : 원시타입-참조타입 / 컬렉션 / 기괴한 매서드 (0) | 2024.12.02 |
자바로 코딩테스트 준비 (1) : 학습법, 효율적인 준비법, 알고리즘 효율 분석 (0) | 2024.12.01 |