-
728x90๋ฐ์ํ
์์ฒญ ๋ ์ง : 11/11/2021
์์ฒญ ๊ฐ์ : ๋ค์ํ ์ ๋ ฌ ์์ฉ๋ฒ (Sort Application)์ ๋ ฌ
์ ๋ ฌ์ ์กฐ๊ฑด์ด ํ์ํ๋ค.
๋ฐฐ์ด์ ์ ๋ ฌ์ Arrays.sort(arrName)๋ก ๊ตฌํํ ์ ์๋ค.
ํ์ง๋ง, ๋ง์ฝ ์ ๋ ฌ์ ์กฐ๊ฑด์ด integer๋ String ์ด ์๋ ๊ฒฝ์ฐ๋ ์๋ก์ด ์กฐ๊ฑด์ด ํ์ํ๋ฐ ๋น์ฐํ ์๋ฐ๋ ์ฐ๋ฆฌ๊ฐ ์ด ์กฐ๊ฑด์ ์ง์ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด ์ ๋ ฌํด์ฃผ์ง ์๋๋ค.
๋ฐ๋ผ์, comparator๋ฅผ implement ํด์ compareTo ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ฌ, ์ฐ๋ฆฌ๊ฐ ์๋ก์ด ์กฐ๊ฑด์ ์ง์ ํด์ฃผ๋ฉด ์ ๊ธฐ์ค์ ์ํด ์ ๋ ฌํด์ค๋ค.
@override public int compareTo(Object o ) { return num-o.num ; //small to big - ASC //return o.num - num; //big to small - DESC }
์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด,
return ๊ฐ์ด num-o.num์ผ ๋๋ ascending ๋ฐ๋๋ descending ์์๋ก ์ ๋ ฌํด์ค๋ค.
Return ๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌ ์์๊ฐ ์ ํด์ง๊ฒ ๋๋๋ฐ ,
Return ์์ (-) ๋ณธ์ธ์ด ๋จผ์ 0 ๊ฐ๋ค ์์ (+) ๋น๊ต ๋์์ด ๋จผ์ ์ ํ๋ฅผ ์ดํด๋ณด๋ฉด return statement๊ฐ ์์์ผ ๋๋ ๋ณธ์ธ์ด ๋ ์๊ธฐ ๋๋ฌธ์ ๋ ์์ ์์นํ๊ฒ ๋๊ณ ์์์ผ ๋์๋ ๋ณธ์ธ์ด ๋ ํฌ๊ธฐ ๋๋ฌธ์ ๋ค์ ์์นํ๊ฒ ๋๋ค.
์ ๋ ฌ ๋ฌธ์ ๋ฅผ ์ฐ์ตํ๊ธฐ ์ํด์,
https://www.acmicpc.net/problem/10825
10825๋ฒ: ๊ตญ์์
์ฒซ์งธ ์ค์ ๋ํ์ด๋ค ๋ฐ์ ํ์์ ์ N (1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ ํ ์ค์ ํ๋์ฉ ๊ฐ ํ์์ ์ด๋ฆ, ๊ตญ์ด, ์์ด, ์ํ ์ ์๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ฃผ์ด์ง๋ค. ์ ์๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 1
www.acmicpc.net
์์ ๋ฐฑ์ค ๋ฌธ์ ๋ฅผ ํ์ด๋ดค๋ค.
์ด๋ฆ ์ ๋ ฌ์์ ์ข ํค๋งค์์๋๋ฐ ์์ ํ์, ์๊ฐ ์ฐจ์ด๋ ์ฉ๋ ์ฐจ์ด๋ ํฌ๊ฒ ์์๋ค. ๋ค๋ง system.out.println๋์ bufferedWriter๋ฅผ ์ฌ์ฉํ์ ๋, ์๊ฐ์ด ๋ฐ์ผ๋ก ์ค์ด๋ ๊ฒ์ ๋ณผ ์ ์์๋ค.
Record Class
๋ฐฑ์ค์ ๋ฌธ์ description์ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
๋ํ์ด๋ค ๋ฐ ํ์ N๋ช ์ ์ด๋ฆ๊ณผ ๊ตญ์ด, ์์ด, ์ํ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ผ๋ก ํ์์ ์ฑ์ ์ ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
1. ๊ตญ์ด ์ ์๊ฐ ๊ฐ์ํ๋ ์์๋ก
2. ๊ตญ์ด ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์์ด ์ ์๊ฐ ์ฆ๊ฐํ๋ ์์๋ก
3. ๊ตญ์ด ์ ์์ ์์ด ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์ํ ์ ์๊ฐ ๊ฐ์ํ๋ ์์๋ก
4. ๋ชจ๋ ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์ด๋ฆ์ด ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก (๋จ, ์์คํค์ฝ๋์์ ๋๋ฌธ์๋ ์๋ฌธ์๋ณด๋ค ์์ผ๋ฏ๋ก ์ฌ์ ์์ผ๋ก ์์ ์จ๋ค.)๋ฐ๋ผ์, ์ ๋ ฅ์ ๋ฐ์ ๋ ๋ฆฌ์คํธ๋ก ๋ฐ๊ณ Record๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์ด๋ฆ, ๊ตญ์ด, ์์ด, ์ํ ์ ์๋ฅผ ์ ์ฅํ๊ธฐ๋ก ํ๋ค.
public static class Record implements Comparable<Record>{ String name; int Korean; int English; int Math; Record(String name , int Korean, int English, int Math){ this.name = name; this.Korean = Korean; this.English = English; this.Math = Math; } //override compareTo }
์ ๋ ฌ ๊ธฐ์ค
๋ฌธ์ ์์ ์ ์ํ
1. ๊ตญ์ด ์ ์๊ฐ ๊ฐ์ํ๋ ์์๋ก
2. ๊ตญ์ด ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์์ด ์ ์๊ฐ ์ฆ๊ฐํ๋ ์์๋ก
3. ๊ตญ์ด ์ ์์ ์์ด ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์ํ ์ ์๊ฐ ๊ฐ์ํ๋ ์์๋ก
4. ๋ชจ๋ ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์ด๋ฆ์ด ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก (๋จ, ์์คํค ์ฝ๋์์ ๋๋ฌธ์๋ ์๋ฌธ์๋ณด๋ค ์์ผ๋ฏ๋ก ์ฌ์ ์์ผ๋ก ์์ ์จ๋ค.)์ ๋ค์ ํ์ด์ ์ค๋ช ํ๋ฉด
1. ๊ตญ์ด๋ฅผ ํฐ ์๋ถํฐ (DESC)
2. ๊ตญ์ด ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์์ด๊ฐ ์์ ์๋ถํฐ (ASC)
3. ์์ด ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์ํ์ด ํฐ ์ ๋ถํฐ (DESC)
4. ๋ชจ๋ ์ ์๊ฐ ๊ฐ๋ค๋ฉด ์ด๋ฆ์ด ์์ ์๋ถํฐ (ASC)์ ์กฐ๊ฑด์ผ๋ก ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํํํ๋ฉด,
1. ๊ตญ์ด ์ ์ : Descending order
if(Korean-o.Korean!=0) { return o.Korean- Korean;}
2. ์์ด ์ ์ : Ascending order
if(English-o.English!=0) { return English-o.English;}
3. ์ํ ์ ์ : Descending order
if(Math-o.Math!=0) {return o.Math - Math;}
4. ์ด๋ฆ : Ascending order
์ฒ์์๋, for loop๋ฅผ ์ฌ์ฉํ์ฌ, ๊ธ์์ ์ ์บ๋ฆญํฐ์ ascii ์ฝ๋ ๋ฒํธ๊ฐ ๋น๊ต๋์๋ณด๋ค ์์ผ๋ฉด -1, ํฌ๋ฉด 1์ ๋ฆฌํดํ๋ค.
for(int i = 0 ; i <o.name.length() ; i ++) { if(o.name.charAt(i)!= name.charAt(i)) { if(o.name.charAt(i)-'0'> name.charAt(i)-'0') {//์ค๊ฐ ๋๋ณด๋ค ํด๋ return -1; } else {return 1;} } }
ํ์ง๋ง, ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋๋ for loop๋ฅผ ์ฌ์ฉํ ํ์ ์์ด
return name.compareTo(o.name);
๊ทธ๋ฅ name์ compareToํ๋ฉด ๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ์๋ Collections.sort()๋ฅผ ํตํด alphabetically ordered list๋ก ์ ๋ ฌํ ์ ์๋ฏ์ด String๋ ๊ทธ๋ฅ ๋น๊ตํด๋ ๋๋ค๋ ๊ฒ์ ์๊ณ ์์๋ค.
for loop๋ฅผ ์ฌ์ฉํ ์ฝ๋์ return name.compareTo(o.name)์ ๋ฉ๋ชจ๋ฆฌ๋ ์คํ ์๋๋ ํฌ๊ฒ ์ฐจ์ด๊ฐ ์์๋ค. ์์ ๊ฒ์
๋ฌผ๋ก ์ฝ๋ ๊ธธ์ด์ ํฐ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ String ํํ๋ ๋ฐ๋ก ๋น๊ตํ ์ ์๋ค๋ ๊ฒ์ ์์ง ๋ง์์ผ๊ฒ ๋ค...
์ ์ฒด ์์ค ์ฝ๋
package com.fastcamp.sort; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Collections; import java.util.StringTokenizer; public class BOJ_10825_๊ตญ์์ { /** * @author June Park * @date 11/11/2021 * ๊ตญ์์ ์ ์ ์ ๋ ฌ ๋ฌธ์ * 1. ๊ตญ์ด ์ ์๊ฐ ๊ฐ์ํ๋ ์์ผ๋ก * 2. ๊ตญ์ด ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์์ด ์ ์๊ฐ ์ฆ๊ฐํ๋ ์ * 3. ๊ตญ์ด ์ ์์ ์์ด ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์ํ ์ ์๊ฐ ๊ฐ์ํ๋ ์ * 4. ๋ชจ๋ ์ ์๊ฐ ๊ฐ์ผ๋ฉด ์ด๋ฆ์ด ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์ผ๋ก (๋๋ฌธ์๊ฐ ์๋ฌธ์๋ณด๋ค ์์ -'0'ํ๋ฉด ๋ ๋ฏ) * */ static int N; static ArrayList<Record>list; public static class Record implements Comparable<Record>{ String name; int Korean; int English; int Math; Record(String name , int Korean, int English, int Math){ this.name = name; this.Korean = Korean; this.English = English; this.Math = Math; } /**๊ตญ์ด ์ ์๊ฐ ๊ฐ์ํ๋ ์์ผ๋ก ์ ๋ ฌ : ๊ตญ์ด๊ฐ ๋์๊ฑฐ๋ถํฐ * if same : ์์ด๊ฐ ์์์ * if same : ์ํ์ด ํฐ ์ * if same : ์ด๋ฆ์ด ์์์ */ @Override public int compareTo(Record o) { //๊ตญ์ด๊ฐ ํฐ ์ if(Korean-o.Korean!=0) { return o.Korean- Korean;} //Else : ์์ด๊ฐ ์์์ if(English-o.English!=0) { return English-o.English;} //Else : ์ํ์ด ํฐ ์ if(Math-o.Math!=0) {return o.Math - Math;} //Else : ์ด๋ฆ์ด ์์ ์ /*for(int i = 0 ; i <o.name.length() ; i ++) { if(o.name.charAt(i)!= name.charAt(i)) { if(o.name.charAt(i)-'0'> name.charAt(i)-'0') { //์ค๊ฐ ๋๋ณด๋ค ํด๋ return -1; } else {return 1;} } } */ return name.compareTo(o.name); } } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st; N = Integer.parseInt(br.readLine()); //ํ์์ ์ list = new ArrayList<>(); String name = ""; int kor= 0, eng = 0, math = 0; for(int i = 0 ; i< N ; i++) { st = new StringTokenizer(br.readLine()); name = st.nextToken(); kor = Integer.parseInt(st.nextToken()); eng = Integer.parseInt(st.nextToken()); math = Integer.parseInt(st.nextToken()); list.add(new Record(name, kor, eng, math)); } br.close(); //sort Collections.sort(list); //print for(Record r : list) { //System.out.println(r.name); bw.write(r.name); bw.write("\n"); } bw.flush(); bw.close(); } }
ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ๋ฐ๋ก๊ฐ๊ธฐ๐ https://bit.ly/3FVdhDa
์๊ฐ๋ฃ 100% ํ๊ธ ์ฑ๋ฆฐ์ง | ํจ์คํธ์บ ํผ์ค
๋ฑ 5์ผ๊ฐ ์งํ๋๋ ํ๊ธ์ฑ๋ฆฐ์ง๋ก ์๊ฐ๋ฃ 100% ํ๊ธ๋ฐ์ผ์ธ์! ๋ ๋ฆ๊ธฐ์ ์ ์๊ธฐ๊ณ๋ฐ ๋ง์ฐจ ํ์น!
fastcampus.co.kr
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
728x90๋ฐ์ํ'๐ STUDY > FASTCAMPUS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 13์ผ์ฐจ (0) 2021.11.13 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 12์ผ์ฐจ (0) 2021.11.12 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 10์ผ์ฐจ (0) 2021.11.10 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 9์ผ์ฐจ (0) 2021.11.09 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 8์ผ์ฐจ (0) 2021.11.08 ๋๊ธ