728x90
https://www.acmicpc.net/problem/11728
● 문제
간단하게 두 배열을 합쳐서 숫자가 적은 수부터 출력하면 되는 문제이다.
처음에는 숫자가 적은 수부터 출력한다고 하여 우선순위 큐를 이용하여 코드를 짜보았지만 시간초과가 발생하였다
다음방법으로는 Arrays.sort()함수를 이용하여서 제작하였다 이후 포인터방식을 이용하여서 구성이 가능하다고 하여 코드 두가지로 한번 만들어 보았다.
● 코드
1. Arrays.Sort() 함수 이용
import java.lang.reflect.Array;
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 i : arr) {
sb.append(i + " ");
}
System.out.println(sb);
}
}
먼저 Arrays.sort()함수를 이용하여 구성해보았다. StringBuilder를 쓰지않으면 시간초과가 발생하므로 StringBuilder도 사용해주었다. 간단하게 함수는 배열 한개를 이용하여 모든 수를 입력받은 뒤 sort함수를 통하여 정렬해준 뒤 StringBuilder를 이용하여 출력을 진행해 주었다.
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] arr1 = new int[N];
int[] arr2 = new int[M];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
arr1[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i = 0; i < M; i++) {
arr2[i] = Integer.parseInt(st.nextToken());
}
int p1 = 0, p2 = 0;
StringBuilder sb = new StringBuilder();
while(p1 < N && p2 < M) {
if(arr1[p1] <= arr2[p2])
sb.append(arr1[p1++] + " ");
else
sb.append(arr2[p2++] + " ");
}
if(p1 == N) {
for(int i = p2; i < M; i++)
sb.append(arr2[i] + " ");
}
if (p2 == M) {
for(int i = p1; i < N; i++)
sb.append(arr1[i] + " ");
}
System.out.println(sb);
}
}
포인터 방식은 말 그대로 배열 두가지를 두고 둘 중 작은수를 출력해주면 출력해준 배열의 인덱스는 한칸 이동하여 다른 배열과 숫자를 비교하여주는 방식이다 근데 진행하다보면 배열의 크기가 동일하지 않은 경우 먼저 끝에 도달한 배열이 있을 수도 있으므로 반복문이 종료된 뒤 남은 숫자를 출력해주는 조건문을 작성해주었다.
728x90
'Study > BaekJoon' 카테고리의 다른 글
[백준 자바JAVA] 11656번- 접미사 배열 (0) | 2024.08.20 |
---|---|
[백준 자바JAVA] 2167번- 2차원 배열의 합 (0) | 2024.07.29 |
[백준 자바JAVA] 9093번 - 단어 뒤집기 (0) | 2024.07.27 |
[백준 자바JAVA] 2606번 - 바이러스 (2) | 2024.07.23 |
[백준 자바JAVA] 18258번 - 큐 2 (1) | 2024.07.22 |