์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์ขŒํ‘œ ์ •๋ ฌ

2023. 11. 8. 15:17ใ†์ธํ”„๋Ÿฐ/์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„

728x90

 

https://hyejin.tistory.com/1245

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์žฅ๋‚œ ๊พธ

https://hyejin.tistory.com/1244 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์ค‘๋ณต ํ™• https://hyejin.tistory.com/1243 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searc

hyejin.tistory.com

-> ์ด์ „ ๋ฌธ์ œ ํ’€์ด 

 

 

7. ์ขŒํ‘œ ์ •๋ ฌ 

์„ค๋ช…

N๊ฐœ์˜ ํ‰๋ฉด์ƒ์˜ ์ขŒํ‘œ(x, y)๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋ชจ๋“  ์ขŒํ‘œ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

์ •๋ ฌ๊ธฐ์ค€์€ ๋จผ์ € x๊ฐ’์˜ ์˜ํ•ด์„œ ์ •๋ ฌํ•˜๊ณ , x๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ y๊ฐ’์— ์˜ํ•ด ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ขŒํ‘œ์˜ ๊ฐœ์ˆ˜์ธ N(3<=N<=100,000)์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ขŒํ‘œ๊ฐ€ x, y ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. x, y๊ฐ’์€ ์–‘์ˆ˜๋งŒ ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

์ถœ๋ ฅ

N๊ฐœ์˜ ์ขŒํ‘œ๋ฅผ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜์„ธ์š”.

 

์˜ˆ์‹œ ์ž…๋ ฅ 1 

5
2 7
1 3
1 2
2 5
3 6

 

์˜ˆ์‹œ ์ถœ๋ ฅ 1

1 2
1 3
2 5
2 7
3 6

 

 

๋ฌธ์ œ ํ’€์ด 1

public class CoordinateAlignment
{
   public static void main(String[] args)
   {
      CoordinateAlignment coordinateAlignment = new CoordinateAlignment();
      Scanner scanner = new Scanner(System.in);
      
      int n = scanner.nextInt();
      ArrayList<Point> points = new ArrayList<>();
      for (int i = 0; i < n; i++)
      {
         points.add(new Point(scanner.nextInt(), scanner.nextInt()));
      }
      
      ArrayList<Point> result = coordinateAlignment.solution(n, points);
      for (Point point : result)
      {
         System.out.println(point.x + " " + point.y);
      }
      
   }
   
   public ArrayList<Point> solution(int n, ArrayList<Point> points)
   {
      Collections.sort(points, (o1, o2) -> {
         if (o1.x == o2.x) {
            return o1.y - o2.y;
         }else {
            return o1.x - o2.x;
         }
      });
      return points;
   }
   
}

class Point
{
   int x;
   int y;
   
   public Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
   
   @Override
   public String toString()
   {
      return "Point{" +
            "x=" + x +
            ", y=" + y +
            '}';
   }
   
}

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป : ๋‚˜๋Š” ์šฐ์„  ์ขŒํ‘œ ์ •๋ ฌ์ด๋ผ๊ณ  ํ•ด์„œ Point๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์ด ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์ •๋ ฌํ•ด์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋จผ์ € Point ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , Scanner ๋ฅผ ํ†ตํ•ด ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅ ๋ฐ›์œผ๋ฉด Point ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•ด์„œ Arraylist์— ๋‹ด์•„์คฌ๋‹ค. 

 

๊ทธ ๋‹ค์Œ Collection.sort๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ points ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ค„ ๊ฒƒ์ธ๋ฐ ์ด๋•Œ ๋žŒ๋‹ค์‹์œผ๋กœ o1, o2  Point ๊ฐ์ฒด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋งŒ์•ฝ o1.x์™€ o2.x ๊ฐ€ ๊ฐ™์œผ๋ฉด o1.y - o2.y ๋กœ ๋บ€ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์คฌ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  o1.x์™€ o2.x๊ฐ€ ๋‹ค๋ฅด๋ฉด o1.x - o2.x ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด 

์šฐ์„  x ๊ฐ’์— ์˜ํ•ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•˜๊ณ , x์˜ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด y ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•œ๋‹ค. 

 

 

 

๋ฌธ์ œ ํ’€์ด 2

public class PointAlignment {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        ArrayList<Point2> point2s = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            point2s.add(new Point2(scanner.nextInt(), scanner.nextInt()));
        }

        Collections.sort(point2s);

        System.out.println("point2s = " + point2s);
    }
}

class Point2 implements Comparable<Point2> {
    int x, y;

    public Point2(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public int compareTo(Point2 o) {
        if (this.x == o.x) {
            return this.y - o.y; // ์˜ค๋ฆ„์ฐจ์ˆœ์€ ์Œ์ˆ˜ ๊ฐ’์ด ๋‚˜์™€์•ผํ•จ
        } else {
            return this.x - o.x;
        }
    }

    @Override
    public String toString() {
        return "Point2{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}

๐Ÿ‘พ : ๊ฐ•์‚ฌ๋‹˜๋„ ๋‚˜์™€ ๋น„์Šทํ•˜๊ฒŒ Point ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์˜€๋Š”๋ฐ Point ํด๋ž˜์Šค์—์„œ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ , compareTo๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. Point2์˜ o ๊ฐ์ฒด๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” this.x์™€ o.x ๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ์—๋Š” this.y - o.y ๋ฅผ ํ•ด์ฃผ๊ณ , this.x์™€ o.x์˜ ๊ฐ’์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ์—๋Š” return this.x- o.x์˜ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

๊ฐ•์‚ฌ๋‹˜์€ ๋”ฐ๋กœ solution ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ , for๋ฌธ์„ ํ†ตํ•ด์„œ Arraylist<Point2> ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ๋ฆฌ์ŠคํŠธ๋ฅผ Collection.sort ๋ฉ”์„œ๋“œ์— ๋„ฃ์–ด์ค˜์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ๋งŒ๋“ค๊ณ  ์ถœ๋ ฅํ•ด์คฌ๋‹ค. 

 

๋งŒ์•ฝ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•ด์ฃผ๊ณ  ์‹ถ๋‹คํ•˜๋ฉด ๋ฐ˜๋Œ€๋กœ o.x - this.x ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

 

 

 

๐Ÿ’ญ ์ขŒํ‘œ ๊ด€๋ จ ๋ฌธ์ œ๋Š” ์ด๋ ‡๊ฒŒ Point ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ๊ทธ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค !! 

 

 

 

 

728x90

'์ธํ”„๋Ÿฐ > ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ๋ฎค์ง๋น„๋””์˜ค (๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜)  (4) 2023.11.09
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์ด๋ถ„ ๊ฒ€์ƒ‰  (0) 2023.11.09
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์žฅ๋‚œ ๊พธ๋Ÿฌ๊ธฐ  (1) 2023.11.08
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์ค‘๋ณต ํ™•์ธ  (0) 2023.11.07
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : Least Recently Used  (0) 2023.11.06