[투포인터] 11728번 - 배열 합치기

안수진·2024년 8월 5일

Baekjoon

목록 보기
28/55
post-thumbnail

[백준] 11728. 배열 합치기

📝 나의 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken()); // 배열 A의 크기
		int M = Integer.parseInt(st.nextToken()); // 배열 B의 크기
		int[] A = new int[N];
		int[] B = new int[M];
		
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i < N; i++) {
			A[i] = Integer.parseInt(st.nextToken());
		}
		
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i < M; i++) {
			B[i] = Integer.parseInt(st.nextToken());
		}
		
		
		int idxA = 0; // 배열 A의 인덱스
		int idxB = 0; // 배열 B의 인덱스
		int idxTmp = 0; // 병합 배열의 인덱스
		int [] merged = new int[N + M];
		
		while(idxA < N && idxB < M) {
			if(A[idxA] > B[idxB]) {
				merged[idxTmp++] = B[idxB++];
			}
			else{
				merged[idxTmp++] = A[idxA++];
			}
		}
		
		while(idxA < N) { // 배열 A의 나머지 요소 병합 배열에 할당
			merged[idxTmp++] = A[idxA++];
		}
		
		while(idxB < M) { // 배열 B의 나머지 요소 병합 배열에 할당
			merged[idxTmp++] = B[idxB++];
		}
		
		StringBuilder sb = new StringBuilder();
		for(int num : merged) {
			sb.append(num).append(" ");
		}
		System.out.println(sb.toString());

	}

}

🚨 주의할 점

제대로 코드를 작성했음에도 시간초과가 떴다.
StringBuilder를 사용해서 merged 배열을 출력하도록 수정했더니 통과가 떴다.

☑️ System.out.print

  • 화면 상에 출력하는 기능을 제공하는 메서드
  • 호출 할때마다 문자열을 매번 새로 생성하고 화면에 출력한다.
  • 이 과정에서 메모리 할당 및 해제 I/O 작업들이 발생하여 성능 부담 발생

☑️ StringBuilder

  • 문자열을 합치거나 변경할 때 사용하는 클래스
  • 내부적으로 char 배열을 가지고 있으며 문자열을 추가하거나 변경하면서 크기가 자동으로 지정된다.
  • 문자열을 반복적으로 추가하거나 변경 할 때 성능상의 이점을 가져올 수 있다.

StringBuilder를 사용하여 문자열을 생성하고 마지막에 toString() 메서드를 호출하여 문자열을 한번에 출력하는 것이 System.out.print를 반복적으로 호출하는 것 보다 훨씬 효율적이다.

profile
항상 궁금해하기

0개의 댓글