이차원 배열과 연산
Last updated
Last updated
0. 핵심 자료구조 생성 - 정렬을 위한 ArrayList
숫자(배열값) 빈도수 저장!
1~100 까지 Number(수,빈도) 타입의 배열 리스트에 추가
빈도수 속성값 c 기준으로 컬렉션 정렬⭐️⭐️⭐️⭐️⭐️ =>Comparator 오버라이드해서 매개변수로 넘겨주거나, 람다식 표현 사용!
정렬된 결과(배열리스트 요소) 2차원 배열에 다시 저장
R연산=>정렬 후 열 크기 갱신, C연산=>정렬 후 행 크기 갱신
정렬 후 나머지 칸 0 으로 채움
컬렉션 정렬
Comparator를 재정의하여 매개변수로 넣어주는 방법
람다 표현식✅
2번째 풀었을 때 틀린 이유
문제 조건 잘못 이해 : 시간은 최대 100까지 가능하기 때문에 t-for문 또한 t<=100이 되어야한다!
나머지 부분을 0으로 넣는 것 => 2차원 배열값이 0으로 다 초기화되있기 때문에 따로 0으로 설정해주지 않아도 된다고 생각했는데, 생각해보면 초기 값이 3 3 3인 경우, 이것은 3 3 0 0..이렇게 되야하기 때문에 (숫자,빈도수)를 넣어주고 나면 이후에는 0으로 설정해주어야한다!
list에 Number(숫자, 빈도수) 넣을 때 빈도수가 0보다 큰 것, 즉 1번 이상 나온 것에 대해서만 처리해줘야한다. 그렇지 않으면 리스트에는 다음과 같이 저장될 것이다. (1,0) (2,0) (3,0) ... (96,5) (97,3) (98,2) (99,1)(100,0) 빈도수 오름차순으로 정렬한다고 해도 빈도수가 0인 것들이 앞에 있기 때문에 빈도수가 1 이상인 의미있는 수들은 뒤로 밀려나있다!
배열 크기가 100이 넘어가면 그것들은 버린다! => (숫자,빈도수) 이렇게 2개의 숫자가 한 쌍으로 들어간다! 그렇기 때문에 예를 들어 100X100 크기 배열에 1부터 100까지의 수가 1번씩 들어가있는 경우, 112131415161718191101..이런식으로 200개의 숫자가 들어가야한다. 그러므로 배열 정렬 연산을 하다가 중간에 크기가 100이 넘어갈 수가 있다! 문제에서 주어진대로 행 또는 열의 크기가 100을 넘어가는 경우에는 처음 100개를 제외한 나머지는 버려야하기 때문에 정렬된 후 리스트에서 요소를 배열에 정렬된 결과를 다시 넣을 때 100개까지만 넣어주면 된다! 2차원 배열 Arr은 크기가 100이기 때문에 인덱스는 99까지 존재한다! 그러므로 99번째까지 숫자를 넣을 수 있다! Arr[idx++] = num.m; Arr[idx++] = num.c;