์ด ๋ฌธ์ ๋, ๋ค๋ฅธ ์ ๋ ฌ ๋ฌธ์ ์ ๋น์ทํ๋ค.
์ฒ์์, Member ํด๋์ค๋ฅผ ์์ฑํ ๋ค, Comparable์ implements ํ ๋ค์
๋์ด๊ฐ ๊ฐ๋ค๋ฉด, ๋งด๋ฒ ์์ด๋๋ฅผ ๋น๊ตํ๊ณ , ๋์ด๊ฐ ๋ค๋ฅด๋ค๋ฉด, ๋์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ๋๊ฒ๋ compareTo()๋ฅผ ์ ์ํ ํ
List<Member> memberList = new ArrayList<>(); ๋ฅผ ์ ์ธํด์ Member ํ์ ์ ๊ฐ์ฒด๋ค์ ๊ธฐ๋กํ ๋ค,
Collections.sort()๋ฅผ ์ฌ์ฉํด์ ์ ๋ ฌํ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ถ๋ ฅ ์, [๋์ด ์ด๋ฆ] ์ด ์ถ๋ ฅ๋์ผ ํ๋ฏ๋ก, toString()์ ์ค๋ฒ๋ผ์ด๋ฉํ์๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
//ํ์๋ค์ ๋์ด๊ฐ ์ฆ๊ฐํ๋ ์์ผ๋ก
// ๋์ด๊ฐ ๊ฐ๋ค๋ฉด ๋จผ์ ๊ฐ์
ํ ์ฌ๋์ด ์์ ์ค๋ ์์ผ๋ก
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.valueOf(br.readLine());
List<Member> memberList = new ArrayList<>();
//Collections.sort() ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด List์ Member๊ฐ์ฒด ์ ์ฅ
for (int i = 0; i < N; i++) {
String[] input = br.readLine().split(" ");
memberList.add(new Member(Integer.valueOf(input[0]), input[1],i));
}
๊ฐ Member๊ฐ์ฒด์ ๋์ด, ์ด๋ฆ, ๋ฑ๋ก์์๋ฅผ ์์ฑํ ๋ค, ๋ฆฌ์คํธ์ ์ ์ฅ
// for (Member member : memberList) {
// System.out.println("member = " + member);
// }
Collections.sort(memberList);
for (Member member : memberList) {
System.out.println(member);
}
}
}
class Member implements Comparable<Member> {
private int age,memberId;
private String name;
Member(int age, String name,int memberId) {
this.age = age;
this.name = name;
this.memberId = memberId;
}
@Override
public String toString() {
return age + " " + name;
}
@Override
public int compareTo(Member m1) {
if (this.age == m1.age) { //๋์ด๊ฐ ๊ฐ๋ค๋ฉด
return this.memberId - m1.memberId; //๋ฑ๋ก ์์๋ก ํ์ธ
}else if(this.age!= m1.age){ //๋์ด๊ฐ ๋ค๋ฅด๋ค๋ฉด
return this.age - m1.age; //๋์ด๋ก ํ์ธ
}
return -1;
}
}
ํ์ง๋ง, ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ์, ๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋๋ ์ด ๋ฌธ์ ์์ StringBuilder๋ฅผ ์ฌ์ฉํ๋ฉด ํ๊ธฐ์ ์ผ๋ก ์๋๊ฐ ๋นจ๋ผ์ง๋ ์ฌ์ค์ ์์๋ค.
๋จผ์ StringBuilder sb = new Stringbuilder(); ๋ฅผ ๋ง๋๋๋ฐ, ๋ง์ง๋ง์ System.out.println(sb) ํ๋ฒ์ผ๋ก ์ถ๋ ฅํ๊ฒ ํ๊ธฐ ์ํ StringBuilder์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ์ธ๋ฑ์ค์ StringBuilder ๊ฐ์ฒด๋ฅผ ๋ฃ์ ์ ์๋ StringBuilder [] ๋ฐฐ์ด์ ๋ง๋ ๋ค.
int ๋ฐฐ์ด์ int[] arr = new int[3]; ์ ๊ฐ์ด ์์ฑํ๋ฏ์ด
StringBuilder ๋ฐฐ์ด๋ StringBuilder[] stringBuilderArray = new StringBuilder[201]; ๋ก ์์ฑํ๋ค.
์ฐธ๊ณ ๋ก ํฌ๊ธฐ๊ฐ 201์ธ ์ด์ ๋, ๋ฌธ์ ์์ ๋์ด๊ฐ 1์ด์์ 200์ด๊น์ง๋ก ์ฃผ์ด์ง๋ค๊ณ ํด์,
๋์ด๋ฅผ StringBuilder๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ํ๊ธฐ ์ํจ์ด๋ค.
์ฒซ for๋ฌธ์ ํตํด์ StringBuilder ๋ฐฐ์ด์ StringBuilder ๊ฐ์ฒด๋ก ์ฑ์์ค๋ค.
๊ฐ์ฒด๊ฐ ์ฑ์์ ธ์์ง ์์ผ๋ฉด, ๋ง์ง๋ง ์ถ๋ ฅ ์ null๊ฐ์ด ๋์ฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ StringBuilder[age]์ ํด๋น age์ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ append ํ๋ค.
๋ง์ฝ
19 ์ต๋งน๊ตฌ
20 ๊น์ฒ ์
20 ๋ฐ์งฑ๊ตฌ
๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋๋ค๋ฉด
StringBuilder[19] ์ ์๋ StringBuilder์ "19 ์ต๋งน๊ตฌ\n" ๊ฐ ์ ๋ ฅ๋์ด์์ ๊ฒ์ด๊ณ
StringBuilder[20] ์ ์๋ StringBuilder์ "20 ๊น์ฒ ์\n20 ๋ฐ์งฑ๊ตฌ\n" ๊ฐ ์ ๋ ฅ๋์ด์์ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง for๋ฌธ์ ํตํด์ ์ฒ์์ ์์ฑํ๋ StringBuilder sb ์ ์ธ๋ฑ์ค ์์๋ก append ํ๋ฉด
"19 ์ต๋งน๊ตฌ\n20 ๊น์ฒ ์\n20 ๋ฐ์งฑ๊ตฌ\n"
๊ฐ ์ ๋ ฅ๋ ๊ฒ์ด๋ค.
์ด๋ ๋์ด ์ค๋ฆ ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ผ๋ฉฐ, ๋์ด๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ์๋์ผ๋ก ํ์ ๋ฑ๋ก ์์ผ๋ก ์ ๋ ฌ์ด ๋๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main (String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder(); //๋ง์ง๋ง์ถ๋ ฅ์ฉ StringBuilder
StringBuilder[] stringBuilderArray = new StringBuilder[201];
for (int i = 0; i < 201; i++){
stringBuilderArray[i] = new StringBuilder();
// StringBuilder ๋ฐฐ์ด์ ํ๋์ฉ StringBuilder ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ฃผ์ง ์์ผ๋ฉด ๋ง์ง๋ง์ ํ๋ฒ์ ์ถ๋ ฅํ ๋, null ๊ฐ์ด ๋์จ๋ค.
// ํ์ง๋ง, ์์ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ ํ๋์ฉ ์ฑ์๋ฃ์ด์ฃผ๋ฉด, ์๋ฌด ๋ฐ์ดํฐ๊ฐ ์ฑ์์ง์ง ์์์ ๋์๋ null ๊ฐ์ด ์ถ๋ ฅ ์๋๋ค.
}
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++){
String[] input = br.readLine().split(" ");
int age = Integer.valueOf(input[0]);
String name = input[1];
stringBuilderArray[age].append(age+" "+name).append("\n");
}
for (StringBuilder k : stringBuilderArray){
sb.append(k);
} //์
๋ ฅ๋ ๋ฐ์ดํฐ๋ค์ ์์, ๋์ด๊ฐ ์ธ๋ฑ์ค๋ก์ ์์๋๋ก ์
๋ ฅ๋์ด์์ผ๋ฏ๋ก, for-each๋ฌธ์ ์ฌ์ฉํ๋ฉด, ๋์ด์์ผ๋ก ๋์ค๊ณ
// ๋์ด๊ฐ ๊ฐ๋ค๋ฉด ๋ฑ๋ก ์์ผ๋ก ๋์ฌ ๊ฒ
System.out.println(sb);
}
}
์๋๊ฐ 1616ms ์์ 680ms ๋ก ํ๊ธฐ์ ์ผ๋ก ๊ฐ์ํ๋ค.
์ด๋ฐ ๋ฐ์์ ํ ์ ์๋๊ฒ ์ฐธ ์ ๊ธฐํ ๊ฒ ๊ฐ๋ค.
์ด๋์ ์๊ณ ๋ฆฌ์ฆ์ ๋ง์ด ํ์ด๋ณด๋ผ๊ณ ํ๋๊ตฌ๋ ์ถ๋ค.