• ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 11์ผ์ฐจ

    2021. 11. 11.

    by. JuneBee

    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
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€