반응형
이 포스팅에서 작성하는 내용은 이것이 취업을 위한 코딩테스트다 (나동빈 지음) 에서 발췌하였습니다.
기본 문제
1. 위에서 아래로
해결 방법 : JAVA 기본 라이브러리를 이용
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int[] arr = new int[num];
for(int i=0;i<num;i++) {
arr[i] = Integer.parseInt(br.readLine());
}
//퀵 정렬 대신 java 정렬 라이브러리 이용
Arrays.sort(arr);
for(int i=0;i<num;i++) {
System.out.print(arr[i] + " ");
}
}
2. 성적이 낮은 순서로 학생 출력하기
해결 방법 : 점수와 이름을 담을 수 있는 클래스와 ArrayList, 삽입 정렬 이용
// 학생 클래스 선언
class Student implements Comparable<Student>{
String name;
int score;
public Student(String name, String score) {
this.name = name;
this.score = Integer.parseInt(score);
}
//점수 순서대로 정렬
@Override
public int compareTo(Student s) {
return this.score - s.score;
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
// 학생 클래스로 된 리스트 선언
ArrayList<Student> list = new ArrayList<>();
int num = sc.nextInt();
sc.nextLine();
for(int i =0; i<num; i++) {
String temp = sc.nextLine();
String[] tempArr = temp.split(" ");
Student sd = new Student(tempArr[0], tempArr[1]);
list.add(sd);
}
sc.close();
// 정렬
Collections.sort(list);
// 출력
for(int i =0; i<num; i++) {
System.out.print(list.get(i).name + " ");
}
}
}
3. 두 배열의 원소 교체
해결 방법 : 두 배열을 정렬 후 가장 작은 수와 가장 큰 수를 비교 후 swap
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp = br.readLine();
StringTokenizer st = new StringTokenizer(temp);
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] arrA = new int[N];
int[] arrB = new int[N];
temp = br.readLine();
st = new StringTokenizer(temp);
for(int i=0; i<N; i++) {
arrA[i] = Integer.parseInt(st.nextToken());
}
temp = br.readLine();
st = new StringTokenizer(temp);
for(int i=0; i<N; i++) {
arrB[i] = Integer.parseInt(st.nextToken());
}
// arrA를 오름차순 정렬
Arrays.sort(arrA);
// arrB를 오름차순 정렬
Arrays.sort(arrB);
// swap count
int count = 0;
// arrA의 가장 작은 원소가 arrB의 가장 큰 원소보다 작다면 Swap
for(int i=0; i<N; i++) {
for(int j=N-1; j>=0; j--) {
// swap count가 k일 떄 탈
if(count == K) {
break;
}
if(arrA[i] < arrB[j]) {
int temporary = arrA[i];
arrA[i] = arrB[j];
arrB[j] = temporary;
count++;
}
}
}
int sum = 0;
for(int i=0; i<N; i++) {
sum += arrA[i];
}
System.out.println(sum);
}
}
반응형
'Algorithm' 카테고리의 다른 글
[이것이 코딩테스트다] 6. 탐색 - 순차 탐색, 이진 탐색 (0) | 2022.01.18 |
---|---|
[BAEKJOON] 1931번 : 회의실배정 (0) | 2022.01.17 |
[이것이 코딩테스트다] 5. 정렬 - 선택, 삽입, 퀵, 계수 정렬 (0) | 2022.01.11 |
[BAEKJOON] 14502번 : 연구소 (0) | 2022.01.10 |
[BAEKJOON] 2667번 : 단지번호붙이기 (0) | 2022.01.08 |