99클럽 코테 스터디 1일차 - n^2 배열 자르기
99클럽 코딩테스트준비 Java
🧩 문제
https://school.programmers.co.kr/learn/courses/30/lessons/87390
💡 시도
첫 번째 풀이
for문 2개를 사용해서 문제를 풀었다.
n*i + k
를 left
, right
와 비교해서 배열에 추가시켰다.
left
와 right
가 long
타입으로 들어와서 이 친구들을 처리하는 데 시간이 오래 걸렸다.
class Solution {
public int[] solution(int n, long left, long right) {
int size = (int) (right - left + 1);
int[] answer = new int[size];
int idx = 0;
for (int i = 0; i < n; i++) {
for (int k = 0; k < n; k++) {
if (n*i + k < left || n*i + k > right){
continue;
}
if (i >= k) {
answer[idx] = i+1;
}
else {
answer[idx] = k+1;
}
idx ++;
}
}
return answer;
}
}
이중 for문이라 테스트 마지막에는 시간초과가 났다.
두 번째 풀이
첫 번째 풀이를 반대로 해서 i
와 k
를 구하도록 했다.
테스트 12번부터 실패한다.
새로운 테스트 케이스를 추가했다. 10^7 과 가까운 수가 입력되면 기댓값과 다른 값이 나오는 점을 확인했다.
세 번째 풀이
테스트 케이스 내용을 확인하여 문제를 해결했다. k의 값을 (int)로 형변환 할 때 전체 연산을 묶어두지 않아서 문제가 생겼다.
📒 정리
long to int
int a = (int) left;
ArrayList to array
import java.util.*; ... int[] answer = {}; ArrayList<Integer> arr = new ArrayList<>(); answer = arr.stream().mapToInt(Integer::intValue).toArray();
새로운 배열
int[] answer = new int[10];
형변환 할 때 괄호 주의!!!!!
✒️ 메모
long에서 int로 형변환 하는데 시간을 많이 썼다. 파이썬처럼 left
를 그대로 for문과 배열 index에 쓸 수 없어서 에러가 많이 났다. 형변환에 주의해야겠다.