[백준] 23056 참가자 명단 - Java
정렬 문제인데.. 조건이 까다롭다.
학급번호가 홀수인 학급을 청팀으로, 짝수인 학급을 백팀으로 나눈 다음 청팀을 먼저 출력하고 백팀을 나중에 출력한다.
학급별로 참가자를 출력하는데, 이름의 길이는 오름차순으로 출력하되 길이가 같으면 사전순으로 출력한다.
신청 가능한 수를 입력받는데 이 수보다 더 많이 참여할 수는 없다.
위 조건을 고려하면서 코드를 작성해야 한다.
코드를 통해 알아보자.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
// N은 학급 수 M 은 신청 가능한 인원 수
// 첫줄부터 학급 오름차순으로 출력함.
// 같은학급 이면 이름길이 짧은거부터!
ArrayList<Integer> numlist = new ArrayList<>();
ArrayList<String> namelist = new ArrayList<>();
int[] chk = new int[11];
while (true) {
int num = sc.nextInt();
String name = sc.next();
if (num == 0) {
break;
}
chk[num]++;
if (chk[num] > M) {
continue;
}
numlist.add(num);
namelist.add(name);
}
for (int i = 0; i < numlist.size(); i++) {
for (int j = 0; j < numlist.size() - 1; j++) {
if (numlist.get(j) > numlist.get(j + 1)) {
int temp = numlist.get(j + 1);
numlist.set(j + 1, numlist.get(j));
numlist.set(j, temp);
String tempname = namelist.get(j + 1);
namelist.set(j + 1, namelist.get(j));
namelist.set(j, tempname);
}
}
}
for (int i = 0; i < numlist.size(); i++) {
for (int j = 0; j < numlist.size() - 1; j++) {
if (numlist.get(j + 1) == numlist.get(j)) {
if (namelist.get(j + 1).length() > namelist.get(j).length()) {
System.out.print("");
} else if(namelist.get(j+1).length() < namelist.get(j).length()){
String tempname2 = namelist.get(j + 1);
namelist.set(j + 1, namelist.get(j));
namelist.set(j, tempname2);
}else if(namelist.get(j+1).length() == namelist.get(j).length()) {
if(namelist.get(j+1).charAt(0)<namelist.get(j).charAt(0)) {
String tempname2 = namelist.get(j + 1);
namelist.set(j + 1, namelist.get(j));
namelist.set(j, tempname2);
}
}
}
}
}
for (int i = 0; i < namelist.size(); i++) {
if (numlist.get(i) % 2 == 0) {
continue;
} else {
System.out.println(numlist.get(i) + " " + namelist.get(i));
}
}
for (int i = 0; i < namelist.size(); i++) {
if (numlist.get(i) % 2 != 0) {
continue;
} else {
System.out.println(numlist.get(i) + " " + namelist.get(i));
}
}
}
}
ArrayList를 공부할 겸 배열 말고 ArrayList를 활용해서 풀었다.
문자열 리스트와 정수 리스트를 만들고 버블정렬 해 주며 정수가 정렬될 때 문자열도 같이 자리를 바꾸도록 작성했다.
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1016 제곱ㄴㄴ수 - Java (0) | 2021.11.17 |
---|---|
[백준] 6549 히스토그램에서 가장 큰 직사각형 - Java (0) | 2021.11.14 |
[백준] 10845 큐 - Java (0) | 2021.10.30 |
[백준] 2702 초6수학 - Java (0) | 2021.10.29 |
[백준] 1159 농구 경기 - Java (0) | 2021.10.29 |
댓글
이 글 공유하기
다른 글
-
[백준] 1016 제곱ㄴㄴ수 - Java
[백준] 1016 제곱ㄴㄴ수 - Java
2021.11.17 -
[백준] 6549 히스토그램에서 가장 큰 직사각형 - Java
[백준] 6549 히스토그램에서 가장 큰 직사각형 - Java
2021.11.14 -
[백준] 10845 큐 - Java
[백준] 10845 큐 - Java
2021.10.30 -
[백준] 2702 초6수학 - Java
[백준] 2702 초6수학 - Java
2021.10.29