jihee-log

99클럽 코테 스터디 1일차 - n^2 배열 자르기

99클럽 코딩테스트준비 Java
Jul 22
·
3 min read

🧩 문제

https://school.programmers.co.kr/learn/courses/30/lessons/87390

💡 시도

첫 번째 풀이

for문 2개를 사용해서 문제를 풀었다.

until-901

n*i + kleft, right와 비교해서 배열에 추가시켰다.

leftrightlong 타입으로 들어와서 이 친구들을 처리하는 데 시간이 오래 걸렸다.

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문이라 테스트 마지막에는 시간초과가 났다.

until-902

두 번째 풀이

첫 번째 풀이를 반대로 해서 ik를 구하도록 했다.

until-903

테스트 12번부터 실패한다.

until-904

새로운 테스트 케이스를 추가했다. 10^7 과 가까운 수가 입력되면 기댓값과 다른 값이 나오는 점을 확인했다.

세 번째 풀이

테스트 케이스 내용을 확인하여 문제를 해결했다. k의 값을 (int)로 형변환 할 때 전체 연산을 묶어두지 않아서 문제가 생겼다.

until-905

📒 정리

  1. long to int

    int a = (int) left;
    
  2. ArrayList to array

    import java.util.*;
    ...
    		int[] answer = {};
    		ArrayList<Integer> arr = new ArrayList<>();
    		
    		answer = arr.stream().mapToInt(Integer::intValue).toArray();
    
  3. 새로운 배열

    int[] answer = new int[10];
    

    형변환 할 때 괄호 주의!!!!!

✒️ 메모

long에서 int로 형변환 하는데 시간을 많이 썼다. 파이썬처럼 left를 그대로 for문과 배열 index에 쓸 수 없어서 에러가 많이 났다. 형변환에 주의해야겠다.


- 컬렉션 아티클






파이팅!