인프런 커뮤니티 질문&답변

jkdev1324님의 프로필 이미지

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

1. 두 배열 합치기(two pointers algorithm)

전위 연산자

22.03.19 01:18 작성

·

167

0

pi++는 곧 answer.add(arr1[pi]); pi++; 이렇게 표현할 수 있지 않나요? 그렇게 적용해서 아래 코드를 실행해보았는데 java.lang.outofMemoryError:java heapspace 에러가 납니다. 에러의 원인이 어디서 발생하는지 고민하다가 파악이 되지 않아서 질문드립니다.
public class IfTwoPointer { public ArrayList<Integer> solution(int[] arr1, int[] arr2, int num1, int num2) { ArrayList<Integer> answer = new ArrayList<>(); int pi = 0; int pj = 0; while (pi < num1 && pj < num2) { if (arr1[pi] <= arr2[pj]) { answer.add(arr1[pi]); pi++; // pi 와 pj++ 를 따로 넣으면, out of memory 에러가 발생한다. } else answer.add(arr2[pj]); pj++; } while (pi < num1) answer.add(arr1[pi]); pi++; while (pj < num2) answer.add(arr2[pj]); pj++; return answer; } public static void main(String[] args) { // TODO Auto-generated method stub IfTwoPointer answer = new IfTwoPointer(); Scanner sc = new Scanner(System.in); int num1 = sc.nextInt(); int[] arr1 = new int[num1]; for (int i = 0; i < num1; i++) { arr1[i] = sc.nextInt(); } int num2 = sc.nextInt(); int[] arr2 = new int[num2]; for (int i = 0; i < num2; i++) { arr2[i] = sc.nextInt(); } for (int data : answer.solution(arr1, arr2, num1, num2)) { System.out.print(data + " "); } // System.out.println(answer.printResult(arr1, arr2, num1, num2, result)); } }

답변 1

0

쏘옹님의 프로필 이미지

2022. 03. 20. 17:46

잘됩니다 {} 넣어보세요.

ArrayList<Integer> answer = new ArrayList<>();

int p1 = 0;

int p2 = 0;

while(p1 < n && p2 < m) {

if(arr1[p1] < arr2[p2]) {

answer.add(arr1[p1]);

p1++;

}else {

answer.add(arr2[p2]);

p2++;

}

}

while(p1 < n) {

answer.add(arr1[p1]);

p1++;

}

while(p2 < m) {

answer.add(arr2[p2]);

p2++;

}

return answer;

 

jkdev1324님의 프로필 이미지
jkdev1324
질문자

2022. 03. 20. 23:43

 

해보니까 되네요! 정말 감사합니다 :)