반응형
설명
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.
각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.
출력
오름차순으로 정렬된 배열을 출력합니다.
예시 입력 1
3
1 3 5
5
2 3 6 7 9
예시 출력 1
1 2 3 3 5 6 7 9
접근 방법
우선, 출력값을 보니 중복을 허용하는 것을 알 수 있다. 그렇다면 Collection 프레임워크의 sort 메소드를 사용한다 해도, set은 안되겠다고 생각했다. 그래서 list를 활용하거나, 단순 구현을 통해 해결 할 수 있다고 생각했다.
1. 단순 구현 (two pointer)
import java.util.*;
class Main{
public ArrayList<Integer> solution(int N, int M, int[] arr1, int[] arr2) {
ArrayList<Integer> answer = new ArrayList<>();
int p1 = 0;
int p2 = 0;
while(p1 < arr1.length && p2 < arr2.length) {
if(arr1[p1] < arr2[p2]) answer.add(arr1[p1++]);
else answer.add(arr2[p2++]);
}
while(p1 < arr1.length) answer.add(arr1[p1++]);
while(p2 < arr2.length) answer.add(arr2[p2++]);
return answer;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
Main T = new Main();
int N = sc.nextInt();
int[] arr1 = new int[N];
for(int i = 0; i < N; i++) {
arr1[i] = sc.nextInt();
}
int M = sc.nextInt();
int[] arr2 = new int[M];
for(int i = 0; i < M; i++) {
arr2[i] = sc.nextInt();
}
System.out.println(T.solution(N, M, arr1, arr2));
}
}
2. sort를 활용한 방법
import java.util.*;
import java.io.*;
public class Main {
static int N, M;
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter((System.out)));
LinkedList<Integer> list = new LinkedList<>();
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
String []str = br.readLine().split(" ");
for (int i = 0; i < N; i++) {
list.add(Integer.parseInt(str[i]));
}
st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
String[] str1 = br.readLine().split(" ");
for (int i = 0; i < M; i++) {
list.add(Integer.parseInt(str1[i]));
}
Collections.sort(list);
for (int x : list) {
System.out.print(x + " ");
}
}
}
강의에 나온대로 풀이를 풀어도 되고, 두번째 방법은 백준 스타일로 문제를 풀어봤다.
이렇게 유연하게 대처할 수 있어야 실제 코테에서는 잘 해결할 수 있으니까..!!
물론, 대부분의 기업이 프로그래머스에서 시험을 치기 때문에, 직접 입력값과 출력값을 넘기는 부분까지는 하지 않아도 된다. 그래도 손코딩 하다보면 더 잘 이해가 되는 경향이 있으니까, 귀찮아도 반복 또 반복하는 게 좋다.
이 글의 문제는 인프런 강의에서 참고하였습니다.
반응형
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[ArrayList를 Array로 형 변환] - 코딩테스트 출력값이 안 맞을 때 (0) | 2024.02.03 |
---|---|
[for each 문] - 알고리즘 공부하다 알게 된 신기한 것 (0) | 2024.02.01 |
[알고리즘 - 인프런] 학급 회장(해쉬) JAVA, HashMap에 대해 조금 파헤쳐보기 (1) | 2024.01.30 |
백준 (10811) - 바구니 뒤집기 Java (0) | 2023.09.08 |
백준(5597) - 과제 안 내신 분? Java (1) | 2023.09.07 |