본문 바로가기
알고리즘/투포인터

[백준 11728] 배열 합치기 / 자바 /투 포인터

by 순원이 2024. 6. 14.

문제         

레벨: S5
알고리즘: 투 포인터

풀이시간: 30분
힌트 참조 유무: 무

https://www.acmicpc.net/problem/11728

1 번째 시도   

 

1. 두 개의 포인터가 각각의 패열 최근 원소 지목하기

2. 포인터가 지정하는 값들 비교해서 작은 값 넣기 

import java.util.*;
import java.io.*;


public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
			
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		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 p1 = 0, p2=0;
		
		while(p1<n && p2<m) {  //두개의 배열 길이만큼만 탐색해야 하므로 
			if(a[p1]<= b[p2]) {
				sb.append(a[p1++]+" ");
			}
			else {
				sb.append(b[p2++]+" ");
			}
		}
		 //두개의 배열 길이가 같지 않은 경우 값을 다 담지 못하는 경우가 발생한다. 
        //그래서 한 배열의 탐색이 완료한 후에는 다른 배열의 남아있는 값도 넣어주어야 한다. 
		if(p1==n) {
			for (int i = p2; i < m; i++) {
				sb.append(b[i]+" ");
			}
		}
		if(p2==m) {
			for (int i = p1; i < n; i++) {
				sb.append(a[i]+" ");
			}
		}
		System.out.println(sb);

	}

}

 

 

투 포인터 안 쓴 버전

import java.util.*;
import java.io.*;


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());  //첫번째 배열 길이
		int m = Integer.parseInt(st.nextToken());  //두번째 배열 길이 		
		int [] arr = new int[n+m];  //정렬할 배열 초기화 
		
		st = new StringTokenizer(br.readLine());  //첫번째 배열 
		
		for (int i = 0; i < n; i++) { 
			arr[i]= Integer.parseInt(st.nextToken());
		}
		st = new StringTokenizer(br.readLine()); //두번째 배열 
		
		for (int i = 0; i < m; i++) {
			arr[i+n] = Integer.parseInt(st.nextToken()); 
		}
		Arrays.sort(arr); //정렬 
		
		StringBuilder sb = new StringBuilder();
		
		for(int r : arr) {
			sb.append(r+" "); 
					
		}
		System.out.println(sb);

	}

}

굳이 투 포인터를 써야 되나 싶다.  이리 간단하게 하면 될 것을.

속도도 이게 더 빠르다. 이번 문제는 투포인터로 보기 애매하다.

'알고리즘 > 투포인터' 카테고리의 다른 글

[백준 2407] 두 용액 / 자바 / 투 포인터  (0) 2024.06.17
[백준 1644] 소수의 연속합  (0) 2024.06.16